在PE标题中,有一个标志,指示二进制文件是否为LargeAddressAware PE头本身同时存在* .exe和* .dll。
Windows OS是否真的只评估父可执行文件的此标志? 是否完全忽略了所有DLL模块?
那么,如果没有人在评估它,我为什么要为DLL启用LAA链接器标志呢?
我记得以下几点:
有没有办法强制Windows在启用LAA的exe加载未编译为LAA的模块时发出警告?
另请参阅相关问题:Drawbacks of using /LARGEADDRESSAWARE for 32 bit Windows executables?
答案 0 :(得分:4)
Windows OS是否真的只为父可执行文件评估此标志?
是。
是否完全忽略了所有DLL模块?
是。
那么,如果没有人在评估它,我为什么要为DLL启用LAA链接器标志呢?
你不应该。这样做毫无意义。
我记得以下几点: 有没有办法强制Windows在启用LAA的exe加载未编译为LAA的模块时发出警告?
没有。
事情是堆是进程范围的。它由所有模块共享。你不能让一些人使用LAA堆而不是其他人。所以只有可执行文件才有机会做出这个决定。该标志是PE文件格式,对于DLL和EXE是常见的。但它只对EXE有意义。