我正在尝试从(我认为)使用 Keil 工具链编译的 nrf24le1 SoC 对原始二进制图像进行逆向工程。具体来说,我看到此图中的 C 函数通常期望它们的参数位于 r7/r5/r3 中,如此处所述,并且返回值位于 r7 中。我看到的行为是:
- Ghidra 认为这个图像中的每个函数都接受 0 个参数,即使很明显该函数立即查看 r7 作为它的第一个参数
- Ghidra 认为返回值存在于 ACC
我必须为每个函数手动覆盖它。我希望 Ghidra 能够自动确定函数何时具有基于 Keil ABI 的参数。
相比之下,当我在原始 arm32 二进制文件上运行 Ghidra 时,它会注意到函数何时在 r0/r1/r2/... 中查找参数,并相应地调整函数声明。所以 Ghidra 对 arm32 表现正确,但对 8051 表现不正确。
有没有办法解决这个问题(或者我应该使用更好的工具来代替 Ghidra)吗?