首页
社区
课程
招聘
关于PE文件.data节的问题
发表于: 2019-1-9 21:37 8209

关于PE文件.data节的问题

2019-1-9 21:37
8209
如上图.data节的数据,文件对齐跟内存对齐都是0x1000,那它文件对齐的情况下大小是0x1600,怎么内存里没有对齐的情况下就变成0x3d3c了呢,多出了那么多数据,哪位大哥给说说,这是什么情况啊.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 5734
活跃值: (1737)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
看手册 
2019-1-9 22:18
1
雪    币: 45
活跃值: (337)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
小艾 看手册
哪个手册,能不能提供下名字
2019-1-9 22:23
0
雪    币: 5734
活跃值: (1737)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
https://docs.microsoft.com/en-us/windows/desktop/debug/pe-format
2019-1-9 22:56
1
雪    币: 244
活跃值: (454)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
pe权威指南。
2019-1-10 09:26
1
雪    币: 45
活跃值: (337)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
小艾 https://docs.microsoft.com/en-us/windows/desktop/debug/pe-format
谢谢
2019-1-10 10:42
0
雪    币: 45
活跃值: (337)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
寧靜致遠 pe权威指南。
这本书上没有吧,我有这本书,就是对着它学习的,确定没有找到相关内容,百度完,也只是说跟编译器有关啥的,没弄明白,才来论坛发帖求助的
2019-1-10 10:43
0
雪    币: 45
活跃值: (337)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
小艾 https://docs.microsoft.com/en-us/windows/desktop/debug/pe-format
貌似上面也没有这部分的介绍啊,我搜了下,就只有简单的介绍了  .data 
Initialized data (free format) 
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE 
其他再没有介绍了
2019-1-10 10:57
0
雪    币: 689
活跃值: (422)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
9
VirtualSize只是一个数值而已,这个数值就是告诉windows,映射这个区段的时候给我多大的内存,你也可以改的更大(但是改小可能会出现问题,因为编译出来的VirtualSize的明确的,表示程序至少需要这么多的内存)。相当于静态分配内存。我猜你没见过VirtualSize为0或者RawSize为0的情况。。。
2019-1-10 13:13
1
雪    币: 45
活跃值: (337)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
zplusplus VirtualSize只是一个数值而已,这个数值就是告诉windows,映射这个区段的时候给我多大的内存,你也可以改的更大(但是改小可能会出现问题,因为编译出来的VirtualSize的明确的,表示程 ...
谢谢大佬指点,我主要是想把一个运行的exe保存到文件里面,然后RawSize就这么大,那等于内存中VirtualSize大小的数据,会有一大部分不知道应该怎么保存到文件里面去,还是说那多出来的部分根本就不需要管它,直接存盘RawSize大小的那部分数据就可以了.
2019-1-10 14:09
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
11
内存有内存的对齐粒度,文件有文件对齐的粒度,记得内存对齐粒度应该一定要是文件对齐粒度的双倍数或相等值(他们之间关系是很紧密的),RawSize 只是指明该节有效数据的一个参考数,写数据到文件是要以这个数据的 文件对齐粒度长度来写的!
最后于 2019-1-10 20:28 被linziqingl编辑 ,原因:
2019-1-10 20:27
0
雪    币: 2203
活跃值: (217)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
12
VirtualSize和SizeOfRawData是其中两个比较重要的属性。根据微软对PE的规定,VirtualSize应该包含载入到内存的节大小,SizeOfRawData应该包含节在硬盘中的大小。Windows加载器使用VirtualSize和SizeOfRawData中的最小值将节数据映射到内存。如果SizeOfRawData大于VirtualSize,则仅将VirtualSize大小的数据复制入内存,忽略其余数据。
2019-1-10 21:09
0
雪    币: 45
活跃值: (337)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
恩,谢谢楼上的两位,差不多已经搞懂了,不再纠结这个问题了.
2019-1-10 21:33
0
雪    币: 5734
活跃值: (1737)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
https://docs.microsoft.com/en-us/windows/desktop/debug/pe-format#section-table-section-headers
2019-1-11 01:08
0
雪    币: 1790
活跃值: (3786)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
DATA节里存储的是程序运行时所需的数据。这些数据在程序运行时是以内存地址形式访问。而编译时数据分几种(只读、读写、已初始化、未初始化等),编译器出于优化考虑,会将未初始化的数据所占空间偏移等预留出来(内存地址偏移),而由于这部分未初始化数据没有初值,所以没必须写入PE文件占用文件大小,所以就会出现你看到的情况。如果不是加壳软件等调整的话,你用PE工具看DATA节的FLAGS应该会包含未初始化数据 IMAGE_SCN_CNT_UNINITIALIZED_ DATA 的标记。
最后于 2019-1-17 10:16 被拍拖编辑 ,原因:
2019-1-17 10:15
0
游客
登录 | 注册 方可回帖
返回
//