什么是图像库(在 windows PE 文件中)

bcv*_*saf 2 windows portable-executable

我在 MSDN 上阅读了有关 PE 格式的文档,其中指定了:

加载到内存时图像第一个字节的首选地址;必须是 64 K 的倍数。 DLL 的默认值为 0x10000000。Windows CE EXE 的默认值为 0x00010000。Windows NT、Windows 2000、Windows XP、Windows 95、Windows 98 和 Windows Me 的默认值为 0x00400000

我不太明白这一点。什么是“首选地址”?在创建新进程/加载可执行文件时,windows 是如何使用这个字段的?

Sam*_*nen 5

它是虚拟内存中应该加载可执行文件的地址,以避免对代码中的绝对跳转指令进行任何调整。操作系统可能会将模块加载到不同的地址(例如,同一程序所需的 2 个 DLL 具有相同的映像库),但在这种情况下,代码需要在加载时进行修补。

有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/ms809762.aspx(在那里搜索 ImageBase)。