我正在尝试确定呼叫指令的目标地址。对于使用立即数但不能调用立即数分配的寄存器的调用,我可以得到这个。当 Ida 插入带有 funcName 的粉红色注释时,如何在这种情况下获取被调用函数的地址?
mov eax, funcName
...
call eax ; funcName
我正在尝试确定呼叫指令的目标地址。对于使用立即数但不能调用立即数分配的寄存器的调用,我可以得到这个。当 Ida 插入带有 funcName 的粉红色注释时,如何在这种情况下获取被调用函数的地址?
mov eax, funcName
...
call eax ; funcName
IDA 具有用于存储和读取特定指令的引用(代码、数据或两者)的特定机制。每当 IDA 成功解析引用时,该机制就会起作用,但情况可能并非总是如此(想想call eax
哪里eax
不容易静态解析)。您应该为所有类型的调用使用该接口。
该功能最适合您的使用情况下,可能是idautils.CodeRefsFrom
这两个参数ea
,并flow
返回一个发电机为所有代码引用从给定的ea
。flow
是一个布尔值,用于控制是否希望包含下一条指令。
还有一堆的其他相关功能,如CodeRefsTo
,DataRefsFrom
,XrefsTo
,等...
要么使用像 OllyDbg 这样的调试器,并在调用所在的位置设置断点。或者您正在查看funcName
写入位置的先前代码 。如果它是动态编写的,最好使用调试器。