【问题标题】:PE header and LARGEADDRESSAWARE not evaluated for DLL modules?PE 标头和 LARGEADDRESSAWARE 未针对 DLL 模块进行评估?
【发布时间】:2014-05-26 22:05:03
【问题描述】:

在 PE 标头中有一个标志来指示二进制文件是否是 LargeAddressAware。
PE 标头本身存在于 *.exe 和 *.dll 中。

Windows 操作系统真的只为父可执行文件评估此标志吗?
是否对所有 DLL 模块都完全忽略?

那么,如果没有人评估它,我为什么要为 DLL 启用 LAA 链接器标志?

我想到了以下几点:
如果启用 LAA 的 exe 加载未编译为 LAA 的模块,是否有办法强制 Windows 发出警告?

另见相关问题:Drawbacks of using /LARGEADDRESSAWARE for 32 bit Windows executables?

【问题讨论】:

    标签: windows dll portable-executable virtual-address-space


    【解决方案1】:

    Windows 操作系统是否真的只为父可执行文件评估此标志?

    是的。

    是否对所有 DLL 模块完全忽略?

    是的。

    那么,如果没有人评估它,我为什么要为 DLL 启用 LAA 链接器标志?

    你不应该。这样做是没有意义的。

    我想到了以下几点: 如果启用 LAA 的 exe 加载未编译为 LAA 的模块,是否有办法强制 Windows 发出警告?

    没有。


    问题是堆是进程范围的。它由所有模块共享。你不能让一些人使用 LAA 堆,而另一些人则不能。所以只有可执行文件才有机会做出这个决定。该标志采用 DLL 和 EXE 通用的 PE 文件格式。但它只对 EXE 有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 2018-05-27
      • 2012-08-16
      • 1970-01-01
      • 2011-01-06
      相关资源
      最近更新 更多