结构体内包含位段,其数据内存分布
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
g_stcPackData结构体变量在内存中数据排列为:
9B 00 00 00 FF FF FF FF // 按照VS默认8字节对齐的
|---> 1001 1011(从右向左排列位数据)
OldOEP+Config+IsDLL