是否可以获得可执行文件的完整反汇编(可以作为汇编程序的输入)?
当我使用otool -tV a.out
时,我只看到文字部分。其他部分如数据不可见。
当我使用gdb
时,反汇编命令需要一个起始地址和一个结束地址。但是我不知道如何找出二进制文件的开始和结束地址(比如a.out)。
我正在尝试反汇编可执行文件,修改汇编代码然后重新组装它。 这可能吗?
如果能找到二进制文件中所有部分的名称,也会有所帮助。
答案 0 :(得分:25)
尝试使用此命令,我记得在某个时候使用它:
otool -tvV a.out
答案 1 :(得分:2)
在Mac上,您可以安装(可能通过自制程序)包含gobjdump的binutils。您可以在安装后反汇编任何二进制程序。它是开放和免费的。
答案 2 :(得分:0)
您可以使用Hopper Disassembler
报价:
Hopper是Mac的逆向工程工具,可让您对32/64位Intel Mac可执行文件进行反汇编,反编译和调试。
它的价格是59美元,但您可以下载一个演示来检查它是否先完成工作。
修改强>
根据the manual,您似乎可以使用otool
实现这一目标。
.B -d 显示(_ \ _ ^ DATA,_ \ ^ _ data)部分的内容。
另请参阅this short blog post,其中介绍了otool
的上述用法,以及如何使用@Sjlver提及的objdump
。
答案 3 :(得分:-3)
在linux上,您可以尝试使用objdump -D myprog
请注意,仅当程序不包含不规则的控制流时,这才有效。特别是恶意软件经常被混淆,例如通过插入随后跳过的伪字节。
如果您定位此类程序,我听说使用的最佳产品之一是IDA pro。