tl;dr 我有一个结构数组,我想在简单的条件下迭代它并更改字段内容(名称、值)。我可以获得成员的偏移量,但由于上述错误,我无法修改它们。
我在 IDA 中有以下结构:
LOAD:86B70B00 22 F6 DC 86 24 F6 DC+stru_86B70B00 Commands_Array <asc_86DCF622, aQueryOrSetAnSR, 2, \
LOAD:86B70B00 86 02 00 00 00 89 F6+ ; DATA XREF: sub_85C73BBC+42o
LOAD:86B70B00 D2 85 DF F6 D2 85 00+ ; LOAD:off_85C73D78o
LOAD:86B70B00 00 00 00 00 00 00 00+ sub_85D2F688+1, sub_85D2F6DE+1>; 0 ; "S" ...
LOAD:86B70B00 3F F6 DC 86 45 F6 DC+ Commands_Array <0, 0, 0x86DCF63F, Byte_Nothing, sub_0+2>; 1
LOAD:86B70B00 86 02 00 00 00 00 00+ Commands_Array <0, 0, 0, sub_0, asc_86DCF646>; 2
LOAD:86B70B00 00 00 00 00 00 00 00+ Commands_Array <aDial, sub_0+3, 0x85CAECA9, sub_85CAECAC+1,\
LOAD:86B70B00 00 00 00 00 00 00 00+ a_end__2>; 3
我想遍历它并通过检查每个成员来更改其每个成员的名称。
获得结构成员的偏移量有点容易,
id = GetStrucIdbyName(struct_name)
print "0x%08x" % (((base + (struct_size * indx)) + GetMemberOffset(id, "Func")))
然而,每当我尝试
MakeName(偏移量,新名称)
我收到以下错误:
不能将字节重命名为“Func”,因为该字节不能有名称(它是尾字节)。
我想我在这里做错了,但我似乎无法找到访问 IDA 结构并正确处理它们的“正确”方法。
帮助将得到积分、啤酒和 RE-SE 名声的赞赏和补偿。