DLL都加载到同一个地址,为什么要这样设计?

DLL are loaded at the same address, why is it designed like that?

在Windows中,相同的DLL跨进程加载到相同的地址,例如advapi32.dll

WmiPrvSE.exe:

svchost.exe:

既然windows启用了ASLR,为什么要这样设计呢?

ASLR 在机器启动时随机化加载地址偏移量,它不是随机的per-process。 ASLR 保护您免受网页等注入的代码的侵害,而不是免受您计算机上已经 运行 的进程的侵害。

在每个进程中加载​​相同的地址有利于页面共享,但 OS 不保证。 Low-level 库更有可能在同一地址加载,advapi32 非常好 low-level。