【发布时间】:2015-09-03 15:48:25
【问题描述】:
如果我们使用ASLR,我是否认为在构建过程中重新定位我们的 dll 毫无意义,因为无论如何当内核开始加载它们时,这些 dll 都会再次重新定位?
我担心我们的应用程序经常在终端服务机器上使用。因此,如果在加载时发生 rebase,我们最终可能会为加载它们的每个进程重新设置 dll(每个会话将有一个进程)。这将导致比我们想要支付的更多的内存使用和分页。我需要担心吗?
我发现以下博客文章说变基只发生一次并且是系统范围的:Matt Evans - Enabling ASLR for memory savings?。我还没有看到任何关于此的其他参考资料,所以只是想确定如果我使用 ASLR 并且在我们的构建过程中不进行 rebase,我不会在终端服务框上造成内存问题?
【问题讨论】:
-
另一个关于备份“一次和系统范围”位的参考:Windows Internals, Sixth Edition, Part 2, p.249 直接说明了这一点。
-
您已经尝试将调试器附加到终端服务框中的多个进程(在不同的会话中)?这应该显示你的 DLL 的地址是什么。