MakeArray()
可以像这样用IDA来堆叠变量:MakeArray()创建数组。
ea-线性地址
nitems-项目中数组的大小
此函数将创建与<相同类型的项目的数组br />
'ea'中项目的类型。如果未定义'ea'处的字节,则
该函数将创建一个字节数组。
谢谢。
MakeArray()
仅适用于线性地址,不适用于如上所示的堆栈变量。如何可以吗?
谢谢。
#1 楼
据我所知,您需要修改函数的堆栈框架以实现您的目标。IDA中的堆栈框架由具有自己的ID和类型的结构表示。
要获得此结构ID,您可以使用idc.get_frame_id
要在更新的API中获得结构本身(IDA 7.0 +如果我没记错的话),可以使用ida_frame.get_frame
获取框架ID或结构后,可以对其进行修改。
如果使用结构,则可以使用模块ida_struct中的函数对其进行修改。
如果使用结构ID,则可以使用idc.add_struc_member。
您可能需要先删除占据所需空间的框架成员。
#2 楼
以下代码在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
评论
MakeArray()需要一个ea作为参数,它可以在结构上工作吗?如何提取结构变量的ea?
– Kinetics332
19年7月30日在11:16
@ Kinetics332:将struct成员ID用作ea
–伊戈尔·斯科钦斯基♦
19年8月1日在8:21