我总是编写临时代码来获取传递给函数调用的值,例如查找函数的外部参照,然后回溯反汇编以查找某些特定的 MOV 或 PUSH 指令。例如,在以下示例中:
.text:080488B1 push [ebp+gid]
.text:080488B4 push [ebp+gid] ; gid
.text:080488B7 call setregid
我会找到设置regid的外部参照,然后找到“推送指令”。或者,在下一个示例中:
LOAD:FFFFFFFF824047A4 mov rdi, exec_map
LOAD:FFFFFFFF824047AC mov esi, 40400h
LOAD:FFFFFFFF824047B1 call kmem_alloc_wait
我会找到 kmem_alloc_wait 的外部参照,然后在调用之前找到设置到寄存器 RDI、RSI、RDX、RCX 的值......对于每个新处理器,我将不得不重新编写我的代码来处理特定的调用该 CPU 或 VM 的约定。但是,我确信必须有某种正确的方法以与 CPU 无关的方式从 IDAPython 获取函数调用的参数值。
那么,您知道有什么方法可以从不依赖解析反汇编的 IDAPython 中获取传递给函数调用的值吗?