IDA 6.9 IDC AddStrucMember

时间:2016-06-23 18:46:10

标签: ida

在IDA中,如果我更改结构成员的类型(使用D热键)并转储到该IDC文件中的idc数据库,它会正确地为该成员生成AddStrucMember命令。

问题是,如果我再次更改该成员(仍然使用D)然后加载以前生成的IDC脚本,则无法将所述成员返回到其原始状态。

1 个答案:

答案 0 :(得分:1)

<强>测试

使用虚拟结构进行测试:

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

根据documentation-2是一个错误:

  

STRUC_ERROR_MEMBER_OFFSET(-2)//已在此偏移处拥有成员

可能的解决方案

所以,最好的选择是删除现有的struct,你可以在struct窗口使用del键,或者使用DelStruc使用python / idc:

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         ends