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


Step Into(在断点处执行指令)(DbgRead()IDCidaapi.dbg_read_memory())之后用ESP读取它并在脚本中分别调用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的值)。

评论


在IDA中获取基数,索引,比例和偏移值可能会有些棘手。您可以使用Sark处理它(对于x86和x64)。但是,它并没有实际读取调试值。

–TMR232
16-3-4在21:54