2012-10-23 58 views
11

是否有可能获得可执行文件的完整反汇编(可用作汇编程序的输入)?获取可执行二进制文件的完整反汇编

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

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

我试图反汇编一个可执行文件,修补程序与汇编代码,然后重新组装它。 这可能吗?

如果能找出二进制文件中所有部分的名字,它也会有所帮助。

回答

0

可以使用Hopper Disassembler

报价:

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

它花费59美元,但你可以下载一个演示来检查它是否首先完成工作。

编辑

看来你可以用otool实现这一目标还有,根据the manual

.B -d 显示(_ \^_ DATA,_ \^_ data)部分的内容。

也看看this short blog post描述提到使用otool,以及如何使用objdump由@Sjlver提及。

+0

'otool -d'肯定显示的数据部分。但那不是全部。如果可执行文件调用类似于:'printf(“ABCD”)'的方法,则无法在任何位置找到程序集中字符串“ABCD”的声明。 – mynk

+0

你尝试过Hopper吗? – jurgemaister

+1

我正在寻找一个免费的解决方案。所以没有给它一个镜头。 – mynk

-2

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

请注意,这只会工作,如果程序不包含不规则的控制流。特别是恶意软件通常被混淆,例如通过插入随后跳过的虚假字节。

如果你的目标是这样的程序,我听说最好的产品之一是IDA pro

+2

这应该是一个评论,因为它不会试图回答这个问题。 – jww

2

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

+0

brew安装binutils为我工作 – brthornbury

+0

这应该是一个评论,因为它没有试图回答这个问题。 – jww

17

尝试使用此命令,我记得使用它是回:

otool -tvV a.out 
+1

这个命令在过去帮助过我以及'otool -IvV a.out'(显示间接符号表)。此外还有用于_data_部分信息的_-d_开关。更多信息:'man otool' – andwagon