能否无需重新编译,通过配置或运行时切换32位程序的LARGEADDRESSAWARE?
LARGEADDRESSAWARE标志的动态切换可行性
结论:无法通过配置文件或运行时设置动态开启/关闭LARGEADDRESSAWARE标志。这个标志是存储在32位PE可执行文件的头部元数据中,Windows加载器在启动进程前就会读取该标志,决定是否为进程分配超过2GB的虚拟地址空间——运行时进程已经启动,加载器的决策已经完成,配置文件也无法干预这一早期步骤。
无需重新编译的修改方式:
你可以使用微软官方的editbin工具直接修改PE文件头,无需重新编译程序,操作命令如下:- 开启标志:
editbin /LARGEADDRESSAWARE your_app.exe - 关闭标志(需使用VS2015及以上版本的editbin):
editbin /LARGEADDRESSAWARE:NO your_app.exe
这个工具属于Visual Studio工具链的一部分,你可以将其单独提取出来,部署到客户服务器上执行修改操作,修改后重启程序即可生效。
- 开启标志:
注意事项:
- 修改前需确认程序已经适配大地址空间(比如避免指针溢出、正确处理32位地址的最高位),否则开启标志后可能出现崩溃或异常行为。
- 修改PE文件属于直接变更可执行文件,建议先备份原文件再操作。
内容的提问来源于stack exchange,提问作者Nitheesh Kedlaya
相关产品推荐
相关产品推荐

