我在头文件中定义了一个类似于此文件的结构:

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)

评论


如果每个文件定义多个结构,该如何撤消呢? #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

#2 楼

删除未定义的字节
,单击未定义的填充字节,然后使用Shrink struct(右键单击菜单或Ctrl-S)选择要删除的字节数-它会自动将正确的数量设置为下一个定义的偏移量。
防止自动添加
这取决于Options/Compiler菜单中的参数:将default alignment更改为1以删除填充,然后导入标头