15

我是否认为如果我们使用ASLR在构建过程中重新定位我们的 dll 没有意义,因为无论如何当内核加载它们时,这些 dll 都会再次重新定位?

我担心我们的应用程序经常在终端服务机器上使用。因此,如果在加载时发生 rebase,我们最终可能会为加载它们的每个进程重新设置 dll(每个会话将有一个进程)。这将导致比我们想要支付的更多的内存使用和分页。我需要担心吗?

我发现以下博客文章说变基只发生一次并且它是系统范围的:Matt Evans - 启用 ASLR 以节省内存?. 我还没有看到任何关于此的其他参考资料,所以只是想确定我是否使用 ASLR 并且在我们的构建过程中不进行变基,我不会在终端服务框上造成内存问题?

4

2 回答 2

1

所以根据我的阅读,你应该没有问题。ASLR 导致 dll 被加载到半随机内存地址,并且不应该只是为每个进程开始变基。如果您想检查 dll 的内存使用情况,有一个名为 MassiveRebase 的免费工具,可让您动态加载两个 dll 并查看有关其内存使用情况的信息。旨在查看 aslr 可能对内存产生的更改。该工具和更多关于它的信息可以在这里找到:http ://www.tmurgent.com/appv/index.php/en/resources/tools/137-massive-rebase

希望这可以帮助。

于 2016-01-14T16:04:15.087 回答
-3

变基仍然很有帮助。当操作系统加载时,它将一个固定的随机值应用于 DLL 库。

结果是 DLL 加载到的位置对于单次引导来说是典型的,但在机器和引导之间是不同的。

这意味着许多进程中的给定 DLL 可以在进程之间共享,因为它的所有代码数据都以相同的值共享。

当一个 DLL 因为它的地址空间被占用而被移动时,它必须修改修复程序,并且共享的 DLL 更少,从而增加了系统负载。

如果您的 DLL 不是共享的,那么它不会影响资源。

如果将 DLL 加载到正确的位置,修复 DLL 的成本过去会更便宜,但不确定这是否适用于 ASLR,但仍可以节省资源加载时间。

于 2016-01-15T08:42:54.233 回答