结构体内包含位段,其数据内存分布
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]
{
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]
相关文章推荐
- 结构体内包含位段,其数据内存分布
- u-boot的内存分布和全局数据结构
- u-boot的内存分布和全局数据结构
- 结构体成员的内存分布与对齐
- 堆栈-数据结构中及内存中
- Oracle专用服务器的内存结构分布原则
- 内存区划分;内存分配;堆、栈概念分析;动态内存管理数据结构及程序样例;核心态与用户态
- 【转载】查找怪数据数组的内存分布和地址(天龙八部)
- AD补码数据和位段结构体
- 笔记:shmat 共享内存中,如果包含指针,指针数据出错的原因
- Jim's游戏外挂学习笔记4——查找怪数据数组的内存分布和地址
- 内存区划分;内存分配;堆、栈概念分析;动态内存管理数据结构及程序样例;核心态与用户态
- 计算结构体内成员的内存偏移量
- Oracle的内存结构和数据字典
- c++内存分布,代码段、全局数据区、栈、堆
- 关于C语言中数据结构的内存对齐问题
- 临时表的表结构和数据都存放在内存里。内存表的表结构存放在磁盘上,只有数据存放在内存里
- Jim's游戏外挂学习笔记4—查找怪数据数组的内存分布和地址
- 发布最实用的数据结构(快速Hash内存表)SDK开发包---产品文档
- 第10章 管理内存和低级数据结构