【问题标题】:Modifying instructions using ida APIs使用 ida API 修改指令
【发布时间】:2013-10-22 09:07:44
【问题描述】:

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

【问题讨论】:

    标签: assembly reverse-engineering ida


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 2021-01-19
      • 2011-11-15
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      相关资源
      最近更新 更多