#define IO_LCD_OUT 0x4000000
是否有一种方法可以将该头文件加载到IDA中以重新定义立即值?
例如,代替:
MOV R12, #0x4000000
可以代替IDA打印:
MOV R12, IO_LCD_OUT
除了我试图解决这个问题以外,还有其他方法可以达到这个结果?我有定义了内存位置的头文件,并且想将该信息加载到ida中! !
#1 楼
您可以在此处使用自定义枚举。转到枚举列表(Shift + F10)。
为您添加一个新的枚举常量列表(Ins)
添加列表(N)的常量,例如名称
IO_LCD_OUT
和值0x4000000
现在您应该可以使用M或上下文菜单在反汇编中替换这些常量。 />
从头生成IDC文件,以编程方式构建枚举(使用函数
AddEnum
和AddConstEx
)。 h2enum.idc
脚本也可能起作用。将这些定义转换为C风格
enum
,解析标头,然后使用从反汇编中导入的枚举(您需要首先在Local Types中执行Synchronize to idb
步骤)。评论
您是否可以交叉引用已定义常量中提到的地址(例如#define IO_LCD_OUT 0x4000000)?如果是,那怎么可能?
– w s
2014年11月18日13:39
不会,尽管我们正在考虑添加此功能,但目前仍未维护对枚举的交叉引用。
–伊戈尔·斯科钦斯基♦
2014年11月18日14:43
#2 楼
导入头文件将无法完成这项工作,因为没有通用的方法可以找出任何已定义常量的含义。您需要为此进行一些手动工作。
我按以下方式处理此问题(它需要一些IDA脚本,但是应该很容易):
对于所有必需的内存区域(例如LCD),应使用
idc.AddSeg
IDAPython api或通过IDA UI。这些区域的地址可以从数据表中收集,也可以通过对头文件的分析来收集。所有这些地址-含义-定义都应从头文件中提取,并通过
idc.MakeName
IDAPython api转换为全局变量名称。二进制应重新分析(选项->常规-> Analisys->重新分析程序)。如果仍然无法识别地址,则需要编写IDAPython脚本,该脚本通过
idc.OpOff
IDAPython api将这些地址转换为偏移量。 据我所知,目前IDA尚无针对此问题的通用解决方案。
评论
当这些值是指内存而不只是标志或其他内容时,这可能是更好的方法。
–伊戈尔·斯科钦斯基♦
2014年11月18日14:46
评论
尝试解析C标头文件时收到什么错误消息?我没有收到任何错误消息,它可以很好地加载文件。我只是不知道如何更改立即值的显示方式。例如,当我右键单击0x4000000时,没有选项允许我将其定义为头文件中的变量