能力值:
( LV9,RANK:180 )
|
-
-
2 楼
看不懂你在说什么
|
能力值:
(RANK:260 )
|
-
-
3 楼
我也看不懂的说
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
昨天我提的问题不够详细,让书呆老大和一些大哥没看明白
我在学习手写可执行文件,在遇到IMAGE_SECTION_HEADER 这个结构体的时候有些地方弄不明白。
结构体中有个 VirtualAddress 成员
这个成员说表示.text 段映射到内存中的起始地址,资料上最后得出的是00100000 ,
.text紧跟着PE 结构后面,PE 结构的大小<1000h,而在内存的对齐粒度为1000h,我始终算不出最后怎么是00100000
|
能力值:
(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。其它平台可能会有其它规定。
还有,同一个问题还是不要另开新贴地好。我给合并了。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢谢书呆哥,明白了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
不懂什么东西?
|
|
|