我可以使用 IDAPython 在 IDA 中评估当前处于断点(调试时)的指令的操作数值吗?

逆向工程 艾达 蟒蛇 调试
2021-06-18 09:16:30

假设我在某些push指令中有很多断点我正在尝试取消引用操作数(如果地址) - 获取脚本中每个操作数的实际相关值,处理立即数、基数 + 索引、寄存器等。我可以通过以下任何其他方式执行此操作:

  1. Step Into(在断点处执行指令)(DbgRead()of IDC, idaapi.dbg_read_memory()之后用 ESP 读取它
  2. 阅读操作,并与相应的电话手动评估它在脚本DbgRead()GetRegValue()等等。

如果可能的话,我想这意味着一个特定的idaapi功能。

1个回答

不,您必须base + index * scale自己实现(如果在 i386 上)。在没有这种复杂性的其他体系结构(例如 ARM)上,它更容易一些。

如果有帮助的话,我已经pwndbg为完全相同的目的实现了这个功能

你可以在这里看到实现:https : //github.com/zachriggle/pwndbg/blob/master/pwndbg/disasm/x86.py

请注意,我没有使用 IDA 的 API,而是使用依赖于 GDB 的 pwndbg 的内部 API。您将不得不对从该代码中获取寄存器和内存值的方式进行一些小的更改(例如,根据需要pwndbg.regs.pc为我提供 EIP 或 RIP 的值)。