您的位置:首页 > 其它

结构体内包含位段,其数据内存分布

2015-03-11 21:59 363 查看
struct _PACKER_DATA
{
unsigned char IsDLL :1; // 是否为DLL
unsigned char Config :3; // 设置
unsigned char OldOEP :4; // 程序入口点
int nSize ; // 位段和非位段数据可并存
};
结构体展开:
​1<------1bit------>|<------3bit------->|<------4bit------>|<-------32bit-------->|
IsDLL Config OldOEP nSize

g_stcPackData.IsDLL = 1; // 1
g_stcPackData.Config = 5; // 101(如果超过3位,只取低3位)
g_stcPackData.OldOEP = 9; // 1001
g_stcPackData.nSize = 0xFFFFFFFF

[b]g_stcPackData结构体变量在内存中数据排列为:[/b]
9B 00 00 00 FF FF FF FF // 按照VS默认8字节对齐的
|---> 1001 1011(从右向左排列位数据)
OldOEP+[b]Config+[b]IsDLL[/b][/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: