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

 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

转载于:https://www.cnblogs.com/aheadshooter/p/4331089.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值