我刚学会用PE格式指定ImageBase
,操作系统会将其加载到.EXE
的确切位置,然后出现问题:
如果两个.EXE
需要相同的ImageBase
位置,该怎么办?
答案 0 :(得分:3)
包含2个EXE,它们具有完全不同的地址空间......每个可执行文件都有自己的空间。
这意味着,每次执行EXE时,都会为其分配自己的独立4GB
(在32位系统上,尽管该过程只能使用其中的一部分,其余部分用于内核。)值得地址空间。这是Virtual Address Space。它与你的物理记忆不同。
所以没有冲突。
从技术上讲,PE可以在任何地方加载,但default ImageBase
为0x400000
。
现在,让我们说你有一个EXE,它加载了几个DLL(碰巧有相同的ImageBase)...在这种情况下,第一个DLL加载正常,第二个DLL被重新定位(或“重新定位”) )。每个DLL都有一个.reloc
部分,其中包含有关更新代码中引用的数据。
答案 1 :(得分:0)
您可以使用Process Explorer 查看任何正在运行的应用程序(带有DLL)的ImageBase和Base地址的值。根据这些值,您可以查看是否已发生变基。