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

 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

posted on 2015-03-11 21:59  一直向前的射手2  阅读(275)  评论(0编辑  收藏  举报

导航