如何使用 IDA API 将立即更改为引用?

逆向工程 艾达
2021-07-03 16:59:33

即什么是 IDA API 等价于按“O”?

1个回答

在 Python 中:

import ida_nalt
import ida_offset
ri.target = -1
ri.flags = 2
EA = 0xdeadbeef
OPND = 1
ida_offset.op_offset_ex(EA, OPND, ri)

其中 EA 是您要更改的行的地址,OPND 是您要更改的行中的立即数的操作数编号。

将特定部分中看起来像参考的所有内容都变成参考的示例脚本:

import sark, ida_nalt, ida_offset

ri = ida_nalt.refinfo_t()
ri.target = -1
ri.flags = 2

magic = [0x45670123]
segment_ranges =  [(s.startEA, s.endEA) for s in sark.segments()]
def is_address(ea):
    return any(start < ea < end for (start,end) in segment_ranges)

for l in sark.Segment(name='ROM').lines:
    if not l.disasm.startswith('LDR '):
        continue
    if ', =0x' not in l.disasm:
        continue
    addr = int(l.disasm.split(', =0x')[-1],16)

    if not is_address(addr) or addr in magic:
        continue

    ida_offset.op_offset_ex(l.ea,1,ri)