You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSVC生成PE32+文件时是否可以移除异常表.pdata节?

移除x64/ARM64 PE文件.pdata节的可行方案

  • 针对C/C++代码的编译链接配置:
    1. 编译阶段给cl.exe添加参数:/EHs-c- /GS-,前者完全禁用C++异常和结构化异常处理,避免编译器生成异常处理相关元数据;后者禁用栈安全检查,消除栈检查逻辑附带的异常表依赖
    2. 链接阶段给link.exe添加参数:/ENTRY:<自定义入口函数名> /NODEFAULTLIB /REMOVE:.pdata,跳过默认CRT入口初始化逻辑(CRT默认自带.pdata内容),同时直接指定链接时移除.pdata节
  • 针对ml64汇编代码的配置:
    不要使用带帧注解的PROC FRAME过程声明,仅使用普通PROC声明函数,同时不要手动定义.pdata、.xdata段,汇编器就不会自动生成PDATA相关条目插入输出文件

重要提醒:仅当你100%确认程序运行全程不会触发任何需要栈展开的场景时,才能移除.pdata节,包括但不限于不抛出C++异常、不会触发访问违规等系统异常、不需要调试器栈展开调试。否则程序触发异常时会直接崩溃,极端情况会出现Windows系统拒绝加载PE文件的问题。

内容的提问来源于stack exchange,提问作者Steven Liang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:36:04