使用 idapython 从堆栈变量生成数组
逆向工程
艾达
蟒蛇
2021-06-10 11:58:11
2个回答
据我所知,您需要修改函数的堆栈框架才能实现您的目标。
IDA 中的堆栈帧由具有自己的 id 和类型的结构表示。为了获得你需要的这个结构 id 你可以使用idc.get_frame_id
为了在较新的 API(IDA 7.0 + 如果我没记错的话)中获得结构本身,你可以使用ida_frame.get_frame
获取帧 ID 或结构后,您可以对其进行修改。
如果您正在使用结构,则可以使用模块ida_struct 中的函数对其进行修改。
如果您正在使用结构 ID,则可以使用idc.add_struc_member。
您可能需要先删除占用所需空间的框架成员。
以下在 IDA 7.2 上对我有用:
- 获取帧 ID 并确认它是正常的。
Python> frame_id = get_frame_id(get_name_ea(BADADDR, 'sub_5450'))
Python> print(list(StructMembers(frame_id)))
[(0L, 'var_18', 8L), (12L, 'var_C', 4L), (24L, ' r', 8L)]
- 获取现有变量 id。
Python> var_id = get_member_id(frame_id, 12)
如果我需要一个新变量,我会先使用add_struc_member(frame_id, 'var_name', var_offset, FF_DATA | FF_BYTE, -1, 1)
。
- 使用
apply_type
,以便把所述可变到一个数组。
Python> apply_type(var_id, parse_decl('int[2]', 0))
True
不知何故MakeArray
不起作用:
Python> MakeArray(var_id, 2)
False
其它你可能感兴趣的问题