首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IDC 6.9IDC AddStrucMember

IDC 6.9IDC AddStrucMember
EN

Stack Overflow用户
提问于 2016-06-23 18:46:09
回答 1查看 635关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-29 09:58:37

测试

使用虚拟结构进行测试:

代码语言:javascript
复制
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...)

改为:

代码语言:javascript
复制
00000000 FooTest         struc ; (sizeof=0x8, mappedto_126)
00000000 f0              dw ?
00000002 f1              dw ?
00000004 f2              dd ?
00000008 FooTest         ends

重新加载idc文件不会改变任何事情..。

检查

与python进行检查:

代码语言:javascript
复制
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

代码语言:javascript
复制
Python>id = GetStrucIdByName("FooTest")
Python>id
18374686479671636398
Python>r = DelStruc(id)
Python>r
True

然后重新加载(备份) idc文件。

结构返回,保存(注意mappedto_xxx已更改):

代码语言:javascript
复制
00000000 FooTest         struc ; (sizeof=0x8, mappedto_127)
00000000 f0              dd ?
00000004 f2              dd ?
00000008 FooTest         ends
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37999502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档