首页
社区
课程
招聘
[求助].text段映射到内存中的起始地址计算,请各位指点下
发表于: 2009-1-23 23:14 4947

[求助].text段映射到内存中的起始地址计算,请各位指点下

2009-1-23 23:14
4947
整个PE结构映射到内存后占的大小<1000h,对齐粒度为1000h,最后得到的说00100000,我自己怎么也算不出来00100000。请那位指点下小弟,不胜感激

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
看不懂你在说什么
2009-1-24 00:02
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
3
我也看不懂的说
2009-1-24 00:32
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
昨天我提的问题不够详细,让书呆老大和一些大哥没看明白
我在学习手写可执行文件,在遇到IMAGE_SECTION_HEADER 这个结构体的时候有些地方弄不明白。
结构体中有个 VirtualAddress 成员
这个成员说表示.text 段映射到内存中的起始地址,资料上最后得出的是00100000 ,
.text紧跟着PE 结构后面,PE 结构的大小<1000h,而在内存的对齐粒度为1000h,我始终算不出最后怎么是00100000
2009-1-24 11:49
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
从你的描述还是不知道你的问题出在哪了。你最好把你所说的资料上的例子全部拿出来,好看清楚。

内存对齐粒度是对连接器的硬性指标,模块的基址必须以64K边界对齐,section的基址必须以页面的边界对齐,加载器只是检测其是否满足,如不满足刚直接报告非法PE文件,而不需要进行处理。

按你的描述,猜测最后的0x00100000应该指的是section的加载虚拟地址VA,但你没有给出相应的RAV值和ImageBase值,所以无法说明。

IMAGE_SECTION_HEADER中的VirtualAddress的值表示相应的section起始地址的RVA。

要得到它的加载后的虚拟地址VA,只需要再加上IMAGE_OPTIONAL_HEADER中的ImageBase值就是了。这个ImageBase,通常叫做默认加载基址或优先加载基址,可以通过链接器参数来改变其默认值。

ImageBase的默认值在NT内核的平台上,对exe文件是0x00400000,对dll文件是0x10000000。其它平台可能会有其它规定。

还有,同一个问题还是不要另开新贴地好。我给合并了。
2009-1-24 13:19
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢书呆哥,明白了
2009-1-24 13:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不懂什么东西?
2009-1-24 14:42
0
游客
登录 | 注册 方可回帖
返回
//