调试器运行时使用idapython打印寄存器或内存值

逆向工程 艾达 蟒蛇 ida插件
2021-07-02 20:53:01

我想在调试程序时记录某个寄存器或特定内存位置的值。例如在以下部分:

.text:0FD6268D                 shr     ecx, 4
.text:0FD62690                 and     esi, 0Fh
.text:0FD62693                 movzx   ecx, ds:byte_FF27790[ecx]
.text:0FD6269A                 mov     [edx], cl
.text:0FD6269C                 inc     dword ptr [eax]
.text:0FD6269E                 mov     edx, [eax]

这是一个被多次访问的函数的一部分,我想打印、归档以下值:

ecx @.text:0FD6268D 和 ds:byte_FF27790 @.text:0FD62693。每次程序在调试期间到达那里时,我都需要打印它。

如何使用 idapython 完成此操作?

2个回答
  1. 创建两个 Python 函数(菜单File-Script 命令...)。第一个用于打印 EAX,第二个用于打印内存@FF27790

Python 函数

def view_ecx():
    print GetRegValue("ecx")

def view_memory():
    print Byte(0xFF27790)    
  1. 设置断点:
    • @.text:0FD6268D- 设置条件view_ecx()并选择 Python 类型
    • @.text:0FD62693- 设置条件view_memory()并选择 Python 类型

谢谢,我想出将这个添加到 BP:

def view_mem_0xF3E7790():   
    opAddr = 0xF3E7790
    for byte in idc.get_bytes(opAddr, 16):
        hexChar = ord(byte)
        print chr(hexChar),
print "\n"

2 个问题: 1. 如何将结果附加到日志而不是打印到屏幕上。2. 我可以以某种方式有问题地添加这些 BP 吗?,类似于 idc.AddBpt(ea)

?