当前位置: 首页 > news >正文

Windows EXCEPTION_RECORD 结构深度解析

Windows EXCEPTION_RECORD 结构深度解析

EXCEPTION_RECORD 是Windows异常处理机制的核心数据结构,它完整描述了异常发生的所有关键信息。理解这个结构对于调试、崩溃分析和系统级编程至关重要。

1. EXCEPTION_RECORD 结构定义

typedef struct _EXCEPTION_RECORD {DWORD                    ExceptionCode;        // 异常代码DWORD                    ExceptionFlags;       // 异常标志struct _EXCEPTION_RECORD *ExceptionRecord;     // 指向嵌套异常的指针PVOID                    ExceptionAddress;     // 异常发生地址DWORD                    NumberParameters;     // 参数个数ULONG_PTR                ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; // 异常参数
} EXCEPTION_RECORD, *PEXCEPTION_RECORD;

2. 各字段详细解析

2.1 ExceptionCode - 异常代码

异常代码是32位值,包含多个部分:

// 异常代码的位布局
// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 
// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
// +---+-+-+-----------------------+-------------------------------+
// |Sev|C|R|     Facility          |               Code            |
// +---+-+-+-----------------------+-------------------------------+// 严重性位 (30-31)
#define EXCEPTION_SEVERITY_SUCCESS    0x00000000
#define EXCEPTION_SEVERITY_INFORMATIONAL 0x40000000  
#define EXCEPTION_SEVERITY_WARNING    0x80000000
#define EXCEPTION_SEVERITY_ERROR      0xC0000000// 客户位 (29) - 1表示客户定义异常
#define EXCEPTION_CUSTOM_BIT          0x20000000// 保留位 (28)
#define EXCEPTION_RESERVED_BIT        0x10000000// 常见异常代码
#define EXCEPTION_ACCESS_VIOLATION          0xC0000005
#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED     0xC000008C
#define EXCEPTION_BREAKPOINT                0x80000003
#define EXCEPTION_DATATYPE_MISALIGNMENT     0x80000002
#define EXCEPTION_FLT_DENORMAL_OPERAND      0xC000008D
#define EXCEPTION_FLT_DIVIDE_BY_ZERO        0xC000008E
#define EXCEPTION_FLT_INEXACT_RESULT        0xC000008F
#define EXCEPTION_FLT_INVALID_OPERATION     0xC0000090
#define EXCEPTION_FLT_OVERFLOW              0xC0000091
#define EXCEPTION_FLT_STACK_CHECK           0xC0000092
#define EXCEPTION_FLT_UNDERFLOW             0xC0000093
#define EXCEPTION_ILLEGAL_INSTRUCTION       0xC000001D
#define EXCEPTION_IN_PAGE_ERROR             0xC0000006
#define EXCEPTION_INT_DIVIDE_BY_ZERO        0xC0000094
#define EXCEPTION_INT_OVERFLOW              0C0000095
#define EXCEPTION_INVALID_DISPOSITION       0xC0000026
#define EXCEPTION_NONCONTINUABLE_EXCEPTION  0xC0000025
#define EXCEPTION_PRIV_INSTRUCTION          0xC0000096
#define EXCEPTION_SINGLE_STEP               0x80000004
#define EXCEPTION_STACK_OVERFLOW            0xC00000FD
#define EXCEPTION_GUARD_PAGE                0x80000001
#define EXCEPTION_INVALID_HANDLE            0xC0000008// 实用函数:解析异常代码
void DecodeExceptionCode(DWORD exceptionCode) {printf("异常代码: 0x%08X\n", exceptionCode);// 解析严重性DWORD severity = exceptionCode & 0xC0000000;switch(severity) {case EXCEPTION_SEVERITY_SUCCESS:printf("严重性: 成功\n"); break;case EXCEPTION_SEVERITY_INFORMATIONAL:printf("严重性: 信息\n"); break;case EXCEPTION_SEVERITY_WARNING:printf("严重性: 警告\n"); break;case EXCEPTION_SEVERITY_ERROR:printf("严重性: 错误\n"); break;}// 检查是否为客户定义异常if (exceptionCode & EXCEPTION_CUSTOM_BIT) {printf("类型: 客户定义异常\n");} else {printf("类型: 系统定义异常\n");}// 解析常见异常switch(exceptionCode) {case EXCEPTION_ACCESS_VIOLATION:printf("描述: 内存访问违规\n"); break;case EXCEPTION_INT_DIVIDE_BY_ZERO:printf("描述: 整数除零\n"); break;case EXCEPTION_STACK_OVERFLOW:printf("描述: 栈溢出\n"); break;case EXCEPTION_BREAKPOINT:printf("描述: 断点异常\n"); break;default:printf("描述: 未知异常类型\n"); break;}
}
常见代码(十六进制) 名称 含义
0xC0000005 EXCEPTION_ACCESS_VIOLATION 内存访问违例(读/写非法地址)
0xC0000094 EXCEPTION_INT_DIVIDE_BY_ZERO 整数除零
0xC0000096 EXCEPTION_PRIV_INSTRUCTION 特权指令(用户态执行内核指令)
0x80000003 EXCEPTION_BREAKPOINT 断点(int 3
0xE06D7363 MSVC_CPP_EXCEPTION C++ 异常(由 MSVC 抛出)
0xC0000374 EXCEPTION_HEAP_CORRUPTION 堆损坏

2.2 ExceptionFlags -

http://www.dtcms.com/a/498935.html

相关文章:

  • LangGraph学习笔记(四):langgraph本地的流式输出
  • Phoenix Code:一款专为Web开发打造的开源文本编辑器
  • 网络营销的基本特征有哪七个wordpress宝塔优化
  • pyvideotrans问题
  • Large-scale CelebFaces Attributes (CelebA) 数据集生态:核心详解、免费下载与三大扩展应用全景​
  • 【BuildFlow 筑流】品牌命名与项目定位说明
  • PHP 8.0+ 现代Web开发实战指南 引
  • 沈阳有什么网站浙江网架公司
  • 零基础学AI大模型之RAG技术
  • 【论文速递】2025年第30周(Jul-20-26)(Robotics/Embodied AI/LLM)
  • Photoshop修图
  • R 矩阵:解析与应用
  • java.io 包详解
  • 整体设计 逻辑系统程序 之34七层网络的中台架构设计及链路对应讨论(含 CFR 规则与理 / 事代理界定)
  • Vue3 项目创建实战:Vue CLI 与 Vite 深度对比与操作指南
  • C++|手写shared_ptr实现
  • Python 数据分析入门:Pandas vs NumPy 全方位对比
  • 学做网站能赚钱吗信息平台网站模板
  • Redis为什么是单线程的
  • layuiadmin与laravel 12 前后端分离nginx配置
  • IDEA在文件中查找快捷键失效
  • 整合知识图谱与大语言模型:下一代药物发现的革命性技术
  • 详解TCP(详细版)
  • TCMalloc原理解析(上)
  • OpenCV深度学习:目标检测、人脸识别与智能视频分
  • 电子商务网站有哪些内容wordpress漏洞2019
  • FileNotFoundError: [WinError 3] 系统找不到指定的路径。
  • qq音乐怎么做mp3下载网站安阳县教育局官网
  • 深度学习进阶(七)——智能体的进化:从 LLM 到 AutoGPT 与 OpenDevin
  • Redis面试八股