有时我会有类似
MOV
的指令:MOV R0, #0xCD548A40
其中数字
#0xCD548A40
是有效的偏移量,但IDA不能自动识别它。 >我尝试使用启用的选项“自动将数据自动转换为偏移量”重新分析可执行文件,而没有任何合适的结果。 :idaapi.jumpto(address)
idaapi.process_ui_action("OpOffset", 0)
使用起来不太方便。
问题
给出特定地址的指令及其有效偏移范围内的一个操作数是它吗?可以使用IDA Python将此类数字转换为偏移量吗?
我应该使用哪个IDAPython API?
#1 楼
我一直在使用IdaOpOff
函数。那是idc
,不是idapython
,而是https://www.hex-rays.com/products/ida/support/idapython_docs/idc-module.html#OpOff说OpOff
中也有idapython
。此外,还有另一个功能OpOffEx
,可让您指定更多详细信息。我认为您需要的就是其中之一。#2 楼
我碰巧碰到了这个确切的问题。这就是我所做的。将
for
位替换为if
位,即可对其进行少量测试。from idautils import *
from idaapi import *
from idc import *
#if True:
# if True:
# if True:
# startea = 0x0F9109DC
# endea = 0x0F9109F
for segea in Segments():
for funcea in Functions(segea, SegEnd(segea)):
functionName = GetFunctionName(funcea)
for (startea, endea) in Chunks(funcea):
for ea in Heads(startea, endea):
if idc.GetMnem(ea) != "MOV" or idc.get_operand_type(ea, 1) != 5 or idc.get_str_type(idc.get_operand_value(ea, 1)) != 0:
continue
print "0x%08x"%(ea), ":", idc.GetOpnd(ea, 1), idc.get_operand_type(ea, 1)
idc.op_plain_offset(ea,1,0)
`