使用ida API修改指令

时间:2013-10-14 18:06:34

标签: assembly reverse-engineering ida

我想使用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)中使用[idaapi.get_bytes(addr + i)for i),它们不会被更改。 我想要更改该地址,并在读取字节时看到此更改。

1 个答案:

答案 0 :(得分:0)

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

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