PE Loading:如何处理资源部分?

问题描述 投票:0回答:1

我正在研究PE文件格式以及Windows如何加载它们。我已经了解了大多数部分以及它们如何在内存中加载/映射。但我不知道资源部分会发生什么,因为那里的所有地址似乎都是顺序的,似乎不需要任何改变。

我已经制作了一个基本加载的测试加载器,但目标.exe文件中有资源并且它们永远不会被加载。

windows winapi portable-executable
1个回答
2
投票

根据PE Format

重要的是要认识到PE文件没有作为单个内存映射文件加载到内存中.Windows加载器(也称为PE加载器)遍历PE文件并决定文件的哪个部分被映射。此映射方法将文件的较高偏移量映射到较高的内存地址。 PE文件结构在磁盘和内存中基本相同,但加载到内存时并未完全复制。 Windows加载程序决定加载哪些部分以及不需要加载哪些部分。此外,由于磁盘对齐和内存对齐之间的不一致,加载到内存中的PE文件的分布将与磁盘上的PE文件的分布不同。

这是一张图片:应用程序加载到内存中

Memory mapping picture

基址值由PE文件本身设置。根据默认设置,visual c ++建立的EXE文件的基地址为00400000h,DLL文件的基地址为10000000h。但是,您可以在连接到应用程序时使用connector / BASE选项创建应用程序时更改此地址,也可以在链接后通过REBASE应用程序进行设置。

另外,这个问题与你提出的问题类似。你可以参考它。

When Resources of a PE file are loaded

© www.soinside.com 2019 - 2024. All rights reserved.