我有一个问题,关于标记为非 ASLR 兼容的 DLL 如何在每次运行加载它的程序时具有不同的基地址。
基本上,这个与 ASLR 不兼容的 DLL(通过 WinDbg-narly 和 确认dumpbin
)每次运行时都会显示不同的起始地址。我做了一些研究,我看到的唯一会导致这种行为的事情是加载程序在运行时将库放在不同的地址,以解释具有相同首选基地址的两个库。但是,每次我运行服务(使用相同的配置、相同的启动顺序等)时,我都会为相关库显示不同的基地址,并且这个基地址永远不会重复(在我测试过的 20 多次中) )。我曾假设,如果加载程序为了非 ASLR 目的而移动库,那么最终基地址至少每隔一段时间都会相同,或者在某种程度上是确定性的。
有没有人知道是什么导致了这种行为?