我正在反转 BIOS,它的代码广泛使用 SP 寄存器作为 16 位返回地址(还有像“bswap ESP”这样的东西来获得“两级深度”堆栈,很少使用“mov mm7, esp”来获得一个“4 级深度”堆栈等)。
似乎 IDA 不跟踪与 SP 相关的语句,甚至无法识别“mov SP,F123h”(在“调用者”子例程内)后跟“jmp sp”(在“被调用者”子例程内)的简单序列。因此,IDA 无法向我显示正确的邻近视图,我必须手动跟踪 SP 值和整个控制流。
有没有办法自动化这个过程?
我读过我可以使用 ALT+F11 手动添加外部参照。当我按 ALT+F11 时,会出现被调用者对话框,但在我输入地址并单击“确定”后,什么也没有发生。至少没有什么可见的。
为什么?它应该只适用于“调用”指令,而不适用于“jmp”吗?如果没有,在按 ALT+F11 之前必须将光标放置在哪里?
PS 我使用的是 IDA Pro 6.8。