我刚刚了解到 ImageBase
是以 PE 格式指定的,操作系统会将其加载到 .EXE
的确切位置,那么问题来了:
如果两个 .EXE
需要相同的 ImageBase
位置怎么办?
最佳答案
对于 2 个 EXE,它们具有完全不同的地址空间...每个可执行文件都有自己的空间。
这意味着,每次执行 EXE 时,它都会被分配自己独立的 4GB
(在 32 位系统上,虽然进程只能使用其中的一部分,但其余部分将由内核使用。)值得地址空间。这是Virtual Address Space 。它与您的物理内存不同。
所以不存在冲突。
从技术上讲,PE 几乎可以加载到任何地方,但 default 除外。 ImageBase
是 0x400000
。
现在,假设您有一个 EXE,它加载了几个 DLL(它们恰好具有相同的 ImageBase)...在这种情况下,第一个 DLL 加载正常,第二个 DLL 被重新定位(或“重新定位”) )。每个 DLL 都有一个 .reloc
部分,其中包含有关更新代码中引用的数据。
关于exe - 关于Windows中.EXE的ImageBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740976/