关于windows中.EXE的ImageBase

问题描述 投票:0回答:2

我刚刚了解到

ImageBase
是以 PE 格式指定的,操作系统会将其加载到
.EXE
的确切位置,那么问题来了:

如果两个

.EXE
需要相同的
ImageBase
位置怎么办?

exe portable-executable
2个回答
3
投票

对于 2 个 EXE,它们具有完全不同的地址空间。每个可执行文件都有自己的空间。 这意味着,每次执行 EXE 时,它都会被分配自己独立的

4GB
(在 32 位系统上,虽然进程只能使用其中的一部分,但其余部分归内核)有价值的地址空间。它是虚拟地址空间。它与你的物理记忆不同。

所以,不存在冲突。

从技术上讲,PE 几乎可以在任何地方加载,但默认

ImageBase
0x400000

现在,假设您有一个 EXE,它加载了几个 DLL(它们恰好具有相同的 ImageBase)...在这种情况下,第一个 DLL 加载正常,第二个 DLL 被重新定位(或“重新基址”)。每个 DLL 都有一个

.reloc
部分,其中包含有关更新代码中引用的数据。


1
投票

您可以使用 Process Explorer 查看任何正在运行的应用程序(及其 DLL)的 ImageBase 和 Base 地址的值。根据这些值,您可以查看是否已进行变基。

© www.soinside.com 2019 - 2024. All rights reserved.