for line in lines:
line = line.strip()
addr, type, sym = line.split(" ")
if type in "tT":
offset = sym_offset(addr, base)
result+="\t%s = %s; /* orig: 0x%s */\n" % (sym, offset, addr)
# 生成需要的脚本
template="""
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)
SECTIONS
{
. = 0x%s;
.text . : {
*(.data)
%s}
}
"""
print template % (base, result)
以下是反汇编的出来部分结果:
ffffffff80466ca0 interruptible_sleep_on:
ffffffff80466ca0: 55 push %rbp
ffffffff80466ca1: 48 ba ff ff ff ff ff mov $0x7fffffffffffffff,%rdx
ffffffff80466ca8: ff ff 7f
ffffffff80466cab: be 01 00 00 00 mov $0x1,%esi
ffffffff80466cb0: 48 89 e5 mov %rsp,%rbp
ffffffff80466cb3: c9 leaveq
ffffffff80466cb4: e9 c7 fe ff ff jmpq ffffffff80466b80 __sched_text_start
ffffffff80466cb9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
ffffffff80466cc0 schedule:
ffffffff80466cc0: 55 push %rbp
ffffffff80466cc1: 48 c7 c0 80 ef 62 80 mov $0xffffffff8062ef80,%rax
ffffffff80466cc8: 48 c7 c2 00 b4 62 80 mov $0xffffffff8062b400,%rdx
ffffffff80466ccf: 48 89 e5 mov %rsp,%rbp
ffffffff80466cd2: 41 57 push %r15
ffffffff80466cd4: 41 56 push %r14
ffffffff80466cd6: 41 55 push %r13
ffffffff80466cd8: 41 54 push %r12
ffffffff80466cda: 53 push %rbx
ffffffff80466cdb: 48 81 ec 98 00 00 00 sub $0x98,%rsp
ffffffff80466ce2: 48 c7 85 78 ff ff ff movq $0xffffffff8062ef80,-0x88(%rbp)
ffffffff80466ce9: 80 ef 62 80
什么软件能将C语言的执行文件反汇编为汇编源代码用一个反汇编调试器即可 。
IDA或者OllyDbg,方便直观,当然VC也有自带的调试器,不过很麻烦,不如IDA或者OD方便 。
补充linux下反汇编命令:
DLL 属于可执行文件中的一类linux下反汇编命令,又称为动态链接库linux下反汇编命令,不能直接用DEBUG加载,一般由应用程序因使用该库中的函数,而由操作系统在应用程序加载的同时被加载入特定地址,这个地址一般是DLL在链接时指定的 。当DLL被加载到运行空间,根据输出函数表,可以得到各个函数的入口地址,然后用DEBUG在各个入口下断点,调用该函数时DEBUG将跟踪进入该函数,从而实现反汇编 。
反汇编属于逆向工程 , 逆向工程的主要手段有两大类,其中一类是动态分析,另一类是静态分析 。
前面提到的方法属于动态分析,由DEBUG实现反汇编,该方法不容易得到完整的代码,一般只能形成一段一段独立分散的代码,同时由于DEBUG的局限性,反汇编的代码质量多不高,生成的代码不能直接使用,原因在于DLL在加载时若没有加载到指定地址空间 , 操作系统将对代码进行重定向,所以DEBUG只能得到重定向后的代码,这类代码必须修改每一个重定向点,才能形成可执行代码 。作为WINDOWS32位操作系统,OLLYDBG是最为优秀的调试、跟踪、反汇编工具,多窗口运行,可以方便的通过窗口操作完成各类动作,而不需要像一般DEBUG那样由命令行来完成,OLLYDBG还有许多一般调试器不具备的功能,同时由于每一代高手不断的修改,使其具有多种功能,同时带来的就是混乱 , 谁也不知道有多少版本 , 谁也不清楚每个版本到底增加linux下反汇编命令了什么功能,但就这样 , 也是瑕不掩疵,OLLYDBG任然是DEBUG中最强大,最好使用的 。
静态分析和动态分析不同 , 静态分析直接打开原程序,加载而不运行,然后直接分析加载的代码 。目前静态分析工具,最强大的当属IDA,IDA支持几乎所有种类的汇编语言 。
IDA加载应用程序有许多选项,可以选择完整的加载整个程序,也可以选择加载程序的某个块,一般可选择的是否加载文件头、资源表、输入表、输出表等等 。
- redis linux安装包 linux下redis包
- mongodb中如何嵌入文档 mongodb嵌入式linux使用
- linuxmongodb启动服务 linux-mongodb
- linux备份工具 linuxmongodb备份命令
- yum-ymysql
- linux安装redis5.0 linux中装redis
- Linux退出root linux退出mongodb
- linux i2c驱动 c驱动mysql
- linuxmongodb启动 linuxmongodb
- kalilinux卸载软件 kalimysql卸载
