我想使用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),它们不会被更改。 我想要更改该地址,并在读取字节时看到此更改。
答案 0 :(得分:0)
尝试使用PatchByte
(或idaapi.patch_byte
)。然后,您应该使用idaapi.get_byte
查看正确的值。对于单词,双字甚至可变长度缓冲区,都有等效的补丁函数。
(注意,这需要您知道要更改的指令的确切字节编码)