我想使用 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)] ),它们没有改变。我想更改该地址,并在读取字节时也看到此更改。