20

是否可以获得可执行文件的完整反汇编(可以作为汇编程序的输入)?

当我使用时,otool -tV a.out我只能看到文本部分。数据等其他部分不可见。

当我使用gdb时,反汇编命令需要一个开始地址和一个结束地址。但是我不知道如何找出二进制文件的开始和结束地址(比如 a.out)。

我正在尝试反汇编一个可执行文件,修改汇编代码,然后重新组装它。那可能吗?

如果可以找出二进制文件中所有部分的名称,那也会有所帮助。

4

4 回答 4

35

尝试使用此命令,我记得曾经使用过它:

otool -tvV a.out
于 2014-10-02T21:21:06.650 回答
2

在 Mac 上,您可以安装(可能通过自制软件)包含 gobjdump 的 binutils。安装后,您可以反汇编任何二进制程序。它是开放和免费的。

于 2014-08-22T13:57:06.133 回答
0

您可以使用Hopper Disassembler

引用:

Hopper 是 Mac 的逆向工程工具,可让您反汇编、反编译和调试 32/64 位 Intel Mac 可执行文件。

它的价格为 59 美元,但您可以下载一个演示以检查它是否首先完成了工作。

编辑

otool根据手册,您似乎也可以实现这一点。

.B -d 显示 (_^_DATA,_^_data) 部分的内容。

另请查看这篇简短的博客文章(存档链接,原版已消失),其中描述了 的上述用途,以及@Sjlver 提到的otool如何使用。objdump

于 2012-10-23T21:41:45.627 回答
-3

在linux上,你可以尝试使用objdump -D myprog

请注意,这仅在程序不包含不规则控制流时才有效。特别是恶意软件经常被混淆,例如通过插入然后跳过的虚假字节。

如果您针对此类程序,我听说最好使用的产品之一是IDA pro

于 2012-10-23T21:41:50.447 回答