IdaPython 获取寄存器操作数的调用目标

逆向工程 艾达 蟒蛇
2021-06-11 22:02:03

我正在尝试确定呼叫指令的目标地址。对于使用立即数但不能调用立即数分配的寄存器的调用,我可以得到这个。当 Ida 插入带有 funcName 的粉红色注释时,如何在这种情况下获取被调用函数的地址?

mov eax, funcName
...
call eax ; funcName
2个回答

IDA 具有用于存储和读取特定指令的引用(代码、数据或两者)的特定机制。每当 IDA 成功解析引用时,该机制就会起作用,但情况可能并非总是如此(想想call eax哪里eax不容易静态解析)。您应该为所有类型的调用使用该接口。

该功能最适合您的使用情况下,可能是idautils.CodeRefsFrom这两个参数ea,并flow返回一个发电机为所有代码引用从给定的eaflow是一个布尔值,用于控制是否希望包含下一条指令。

还有一堆的其他相关功能,如CodeRefsToDataRefsFromXrefsTo,等...

要么使用像 OllyDbg 这样的调试器,并在调用所在的位置设置断点。或者您正在查看funcName写入位置的先前代码 如果它是动态编写的,最好使用调试器。