【发布时间】:2019-03-25 14:55:07
【问题描述】:
我正在研究 PE 文件格式以及 windows 如何加载它们。我已经知道大多数部分以及它们如何在内存中加载/映射。但我不知道资源部分会发生什么,因为那里的所有地址似乎都是连续的,似乎不需要任何更改。
我制作了一个测试加载器,它执行基本加载,但目标 .exe 文件中有资源,它们永远不会被加载。
【问题讨论】:
-
程序尝试加载资源时不是按需发生吗?
-
不需要任何特殊处理。 @DavidHeffernan - 不,资源在加载时映射到内存。
LoadResource实际上并没有加载任何数据,而是返回内存中已经映射资源的地址。 -
@RbMm 那是的,虚拟内存系统在第一次访问时会在页面错误时加载数据
-
@DavidHeffernan 它可能不需要任何手动映射如果 PE 在默认地址 (0x00400000) 加载。但由于 PE 可以手动加载任何虚拟地址,
LoadIcon和朋友将永远无法在预期位置找到资源。 -
你说的不是映射。你说的是搬家。资源不需要搬迁。您需要了解映射是什么。
标签: windows winapi portable-executable