0

我想使用 idautils 和/或 idaapi 更改指令的 Op 值。例如,我在内存中下载了一个二进制文件,我想改变一个JMP语句的JMP地址(我知道跳转在哪里,我可以得到该语句)。我试图做这样的事情:

i = ida.idautils.DecodeInstruction(addr)
op = i.Op1
op.addr = new_addr
i.Op1.assign(op)
print i.Op1.addr

但是地址没有变。相反,如果我这样做:

i = ida.idautils.DecodeInstruction(addr)
op = idaapi.op_t()
op.addr = new_addr
i.Op1.assign(op)
print i.Op1.addr

它有效,但是当我查看字节时(使用 [idaapi.get_bytes(addr+i) for i in range(0, i.size)] ),它们没有改变。我想更改该地址,并在读取字节时也看到此更改。

4

1 回答 1

0

尝试使用PatchByte(或idaapi.patch_byte)。然后你应该看到正确的值idaapi.get_byte。单词、双字甚至可变长度缓冲区都有等效的补丁函数。

(请注意,这需要您知道要更改的指令的确切字节编码)

于 2013-10-22T17:04:35.863 回答