【问题标题】:Getting complete disassembly of an executable binary获取可执行二进制文件的完整反汇编
【发布时间】:2012-10-23 21:37:30
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: macos gdb disassembly otool


    【解决方案1】:

    试试这个命令,我记得以前用过:

    otool -tvV a.out
    

    【讨论】:

    • 这个命令在过去帮助了我很多以及otool -IvV a.out(显示间接符号表)。此外,还有 -d 开关,用于获取关于 data 部分的信息。更多信息:man otool
    【解决方案2】:

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

    【讨论】:

    • 这应该是一条评论,因为它不会试图回答这个问题。
    【解决方案3】:

    您可以使用Hopper Disassembler

    引用:

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

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

    编辑

    根据the manual 的说法,您似乎也可以使用otool 来实现这一点。

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

    还可以查看this short blog post(存档链接,原版已消失),它描述了otool 的上述用法,以及@Sjlver 提到的如何使用objdump

    【讨论】:

    • otool -d 当然会显示数据部分。但这还不是全部。如果可执行文件调用类似:printf("ABCD") 的方法,我在程序集中的任何地方都找不到字符串“ABCD”的声明。
    • 我正在寻找免费的解决方案。所以没有试一试。
    • 这应该是一条评论,因为它不会尝试回答问题。
    • @jww 这怎么不试图回答这个问题?
    【解决方案4】:

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

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

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

    【讨论】:

    • 这应该是一条评论,因为它不会尝试回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2012-12-26
    • 2015-09-28
    • 2020-07-05
    相关资源
    最近更新 更多