在IDA中,如果我更改结构成员的类型(使用D热键)并在该idc文件中转储到IDC数据库,它将正确地为该成员生成一个AddStrucMember命令。
问题是,如果我再次更改该成员(仍然使用D),然后加载先前生成的IDC脚本,则无法将该成员返回到原来的状态。
发布于 2016-06-29 09:58:37
测试
使用虚拟结构进行测试:
00000000 FooTest struc ; (sizeof=0x8, mappedto_126)
00000000 f0 dd ?
00000004 f2 dd ?
00000008 FooTest ends将其导出到IDC (File > Produce File > Dump typeinfo to IDC file...)
改为:
00000000 FooTest struc ; (sizeof=0x8, mappedto_126)
00000000 f0 dw ?
00000002 f1 dw ?
00000004 f2 dd ?
00000008 FooTest ends重新加载idc文件不会改变任何事情..。
检查
与python进行检查:
Python>id = GetStrucIdByName("FooTest");
Python>id
18374686479671636282
Python>mid = AddStrucMember(id,"f0", 0, 0x20000400, -1, 4)
Python>mid
-2根据文档,-2是一个错误:
STRUC_ERROR_MEMBER_OFFSET (-2) //已在此偏移量处拥有成员
可能的解决方案
因此,最好的选择是删除现有的结构,您可以在struct窗口或python / idc上使用del键和DelStruc。
Python>id = GetStrucIdByName("FooTest")
Python>id
18374686479671636398
Python>r = DelStruc(id)
Python>r
True然后重新加载(备份) idc文件。
结构返回,保存(注意mappedto_xxx已更改):
00000000 FooTest struc ; (sizeof=0x8, mappedto_127)
00000000 f0 dd ?
00000004 f2 dd ?
00000008 FooTest endshttps://stackoverflow.com/questions/37999502
复制相似问题