struct STRUCT
{
char a;
int b;
};
IDA成功解析了它,但是它在
char
之后添加了填充字节:00000000 STRUCT struc ; (sizeof=0x4)
00000000 a db ?
00000001 db ? ; undefined
00000002 b dw ?
00000004 STRUCT ends
我无法使用u删除填充字段,所以问题是:如何删除IDA自动插入的填充字段,或者如何防止IDA创建填充字段?
#1 楼
您可以在声明前使用#pragma pack(1)
。#2 楼
删除未定义的字节,单击未定义的填充字节,然后使用
Shrink struct
(右键单击菜单或Ctrl-S)选择要删除的字节数-它会自动将正确的数量设置为下一个定义的偏移量。 防止自动添加
这取决于
Options/Compiler
菜单中的参数:将default alignment
更改为1以删除填充,然后导入标头
评论
如果每个文件定义多个结构,该如何撤消呢? #pragma pack(0)?此语法是否源自MSVC?
–heinrich5991
13年5月17日在13:44
#pragma pack(push,1)/ #pragma pack(pop)
–伊戈尔·斯科钦斯基♦
13年5月17日在15:11
值得注意的是,如果您确实希望填充结构的成员,则可以这样定义它:__declspec(align(4))char;
–嗜尿菌
16年8月20日在9:49