ARM 二进制反汇编,Hopper 工作,Ghidra 和 Radare2 不适用于某些功能

逆向工程 雷达2 吉德拉
2021-06-29 09:23:11

我正在反汇编一个大的 ARM 二进制文件,我发现对于某些函数,Ghidra 和 Radare2 似乎都无法反汇编某些函数,而 Hopper 可以用于这些相同的函数

在 Ghidra - 我在(正确的)地址反汇编中看到问号

                         LAB_1006750e0                                   XREF[1]:     1006750d0(j)  
   1006750e0 00 00 80 d2     mov        x0,#0x0
   1006750e4 f4 03 13 aa     mov        x20,x19
   1006750e8 b0 00 00 94     bl         FUN_1006753a8                                    undefined FUN_1006753a8()
   1006750ec f0 ff ff 17     b          LAB_1006750ac
   1006750f0 e2              ??         E2h
   1006750f1 f3              ??         F3h
   1006750f2 ff              ??         FFh
   1006750f3 10              ??         10h
   1006750f4 1f              ??         1Fh
   1006750f5 20              ??         20h     
   1006750f6 03              ??         03h
   ...

在radare2 - 在寻找地址并运行af和pdf后,我得到:“线性大小与bbsum差异太大,请改用pdr。”

我可以在这里做些什么来让这些函数在 Ghidra 和radare2 中反汇编?

1个回答

我只能解决你问题的 Ghidra 部分:

一般来说,您始终可以通过标记并点击F(“FunctionPlugin”的“创建函数”的默认键绑定)或从上下文菜单中选择“创建函数”来指示 Ghidra 在给定位置创建函数。

问号在那里是因为 Ghidra 不能或没有拆卸这个部件,因此没有任何组装说明可以显示。但是这可能会在您创建函数后立即改变

具体来说,右键单击1006750f0并从上下文菜单中选择“创建函数”。这应该为您提供反汇编和反编译功能。

另一个一般性评论:函数识别是一个难题,不同的工具(IDA、radare2、Hopper、Ghidra 等)使用了许多不同的算法和启发式方法来解决它。这些都不是完美的,有时这些工具中的一些比其他工具表现得更好。