为什么 Ghidra 不能正确加载反汇编,而radare2 可以?

逆向工程 拆卸 吉德拉
2021-06-21 06:57:31

我正在尝试对这里提供的一个非常小的二进制文件进行反汇编该文件是从另一个可执行二进制文件的一部分裁剪而来的。

当我用r2打开它时,它会自动识别架构并可以为我提供拆卸:

在此处输入图片说明

然而,使用 Ghidra,它无法自动找到架构,我必须手动指定语言:

在此处输入图片说明

即便如此,我得到以下作为反汇编:

在此处输入图片说明

与开源radare2相比,NSA的Ghidra在这种情况下的表现如此糟糕,我感到非常惊讶。有人可以描述发生了什么,我该如何解决?

2个回答

当您只有原始字节而没有适当的标头时,工具可能不知道如何处理,因为代码可能不是从 offset 开始的0他们可以尝试分析字节以检测是否存在代码、数据或其他内容,但您也可能会得到一些误报。

在您的情况下,您指示r2将这些字节显示为代码 ( pd - print disassembly) 并且它无法识别任何架构,因为默认情况下它具有 x86。当您不打开任何文件(r2 -然后e asm.arch时,您会得到相同的结果

在 Ghidra 中,您手动选择架构并“强制”工具执行与您pd在radare2 中相同的操作,只需按D

Paweł Łukasik 是正确的。

使用 Ghidra 反汇编代码片段可以分 3 个步骤完成:

  1. 选择架构(你已经完成了)

  2. 突出显示要反汇编的字节

突出显示并按 D

  1. 按 Paweł 所说的“D”或右键单击并选择“拆卸”

拆解的片段