我阅读了有关MSDN上PE格式的文档,其中指定了:
图像的第一个字节在加载到内存时的首选地址;必须是64 K的倍数。DLL的默认值为0x10000000。 Windows CE EXE的默认值为0x00010000。 Windows NT,Windows 2000,Windows XP,Windows 95,Windows 98和Windows Me的默认值为0x00400000
我不太明白这一点。什么是“首选地址”? Windows在制作新进程/加载可执行文件时如何使用此字段?
答案 0 :(得分:2)
它是虚拟存储器中的地址,应在该地址加载可执行文件,以免对代码中的绝对跳转指令进行任何调整。 操作系统可能会将模块加载到其他地址(例如,同一程序所需的2个DLL具有相同的映像库),但在这种情况下,加载时需要对代码进行修补。
有关更多信息,请参见https://msdn.microsoft.com/en-us/library/ms809762.aspx(在此处搜索ImageBase)。