我想使用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它可以工作,但是当我查看字节时(对范围(0,i.size)中的i使用idaapi.get_bytes(addr+i) ),它们没有改变。我希望更改该地址,并在读取字节时也看到此更改。
发布于 2013-10-23 01:04:36
尝试使用PatchByte (或idaapi.patch_byte)。然后,您应该可以使用idaapi.get_byte看到正确的值。对于单词、双字,甚至可变长度的缓冲区,都有等效的补丁函数。
(请注意,这需要知道您想要更改的指令的确切字节编码)
https://stackoverflow.com/questions/19366364
复制相似问题