Idapython:添加将函数地址加载到寄存器的链接

逆向工程 蟒蛇
2021-06-25 21:37:34

我正在编写一个 Idapython 加载程序脚本,以帮助对具有 68000 处理器的嵌入式系统上的固件进行逆向工程。

不幸的是,我无法获得用于构建 FLIRT 签名的原始 C 编译器的副本,但我想使用 Idapython 向 IDA 提供有关它已完成的一些优化的提示。

举个例子——编译器经常做这样的事情:

MOVEA.L   #sub_1234, a4
...
JSR       (a4)

优化之处在于,它使用地址寄存器来保存函数的地址,从而在多次调用一个函数时节省了代码空间。

我想我可以弄清楚如何在代码中搜索这些模式——但是我怎么能告诉 IDA “(a4)”真的是对 sub_1234 的引用?

2个回答

想想看,除了我的其他答案,还有一个 IDA 的功能我忘记了:将光标放在呼叫上并执行 Edit->Plugins->Change the callee address (Alt-F11)。

IDA 不接受这些方面的“提示”,但您可以通过脚本手动创建交叉引用。如果您知道目标地址,则可以使用add_cref添加从源地址到目标的传出交叉引用如果您在目的地按 ctrl-X 或在源按 X,这些将显示。您还可以在带有目标地址的呼叫站点上添加注释,这基本上会产生一个“超链接”,您可以在光标悬停的情况下双击或按“输入”键。