首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
最小整数除零 Dump 实验详解
📅 2026/10/7 15:08:21
✍️ 爱科研究院
👁 阅读 3,247
1. 实验目标这个工程只验证一条最短的 Windows 崩溃捕获链路:注册顶层异常处理器 - CPU 执行整数除零指令 - Windows 产生 0xC0000094 异常 - 异常处理器收到 EXCEPTION_POINTERS - MiniDumpWriteDump 写入 divide_by_zero.dmp - 进程终止 ``` 工程没有命令行参数、配置类、公共 Dump 库或运行脚本,核心只有: ```text main.cpp CMakeLists.txt它适合先理解最基本原理,再阅读完整DumpCore工程。2. 工程位置源码:Crash_Reporter/Minimal_Divide_By_Zero/ ├── CMakeLists.txt ├── main.cpp └── README.md生成的 Visual Studio 2022 工程:02_Debugging_and_Crash/b-div0/MinimalDivideByZeroDump.slnDebug 产物:b-div0/Debug/MinimalDivideByZeroDump.exe b-div0/Debug/MinimalDivideByZeroDump.pdbb-div0使用短目录名,是为了规避旧版 MSBuild 的 260 字符路径限制。它是可删除、可重新生成的构建目录,不是源码目录。3. CMake 配置3.1 声明 CMake 版本和工程cmake_minimum_required(VERSION 3.20) project(MinimalDivideByZeroDump LANGUAGES CXX)作用:要求 CMake 版本至少为 3.20。创建一个仅使用 C++ 的独立工程。Visual Studio 解决方案名称来自project。3.2 创建可执行程序add_executable(MinimalDivideByZeroDump main.cpp)它把唯一的源文件main.cpp编译为:MinimalDivideByZeroDump.exe3.3 链接 DbgHelptarget_link_libraries(MinimalDivideByZeroDump PRIVATE Dbghelp)MiniDumpWriteDump的声明来自DbgHelp.h,运行时代码由 Windows 的DbgHelp.dll/DbgCore.dll提供。编译阶段还需要链接DbgHelp.lib导入库,否则链接器会报告找不到MiniDumpWriteDump。PRIVATE表示该依赖只属于当前可执行程序,不向其他目标传播。3.4 MSVC 编译选项target_compile_options( MinimalDivideByZeroDump PRIVATE /W4 /permissive- /utf-8) ``` - `/W4`:启用较严格的编译警告。 - - `/permissive-`:要求更严格地遵守 C++ 标准。 - - `/utf-8`:源码和执行字符集使用 UTF-8。 ### 3.5 设置启动项目 ```cmake set_property( DIRECTORY PROPERTY VS_STARTUP_PROJECT MinimalDivideByZeroDump) ``` 打开 `.sln` 后,Visual Studio 默认启动这个程序,而不是 CMake 自动生成的 `ALL_BUILD` 目标。 ## 4. 头文件 ```cpp #include Windows.h #include DbgHelp.h #include cstdio各自作用:头文件提供内容Windows.hSEH、文件句柄、进程和线程 APIDbgHelp.hMiniDumpWriteDump、Minidump 数据结构cstdioputs、fprintf、fflush5. 顶层异常处理函数函数签名:LONG WINAPIWriteDump(EXCEPTION_POINTERS*exception_pointers)5.1LONG返回值告诉 Windows 如何处理该异常。本实验最终返回:EXCEPTION_EXECUTE_HANDLER含义是异常已经交给处理器处理,随后结束故障进程。5.2WINAPIWINAPI指定 Windows API 调用约定。它保证调用方和被调用方对参数传递、栈清理方式的理解一致。5.3EXCEPTION_POINTERSWindows 在异常发生时传入:structEXCEPTION_POINTERS{EXCEPTION_RECORD*ExceptionRecord;CONTEXT
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/7 15:03:21
零依赖纯文本知识库:用文件夹+Git搭建永不过期的个人笔记系统
2026/10/7 15:03:21
Obsidian插件Superpowers详解:从安装配置到高效文本编辑技巧
2026/10/7 15:03:20
ARCGIS学习笔记(一):计算几何中面积被禁用?用TaoToken统一Key跑通Python面积求和
2026/10/7 18:33:45
传递熵与widelymfx:时间序列因果推断的方向性分析工具
2026/10/7 18:33:45
昇腾NPU加速FFmpeg编译实战:从环境配置到硬件解码
2026/10/7 18:33:45
从环形队列到自适应数据总线:高性能日志库的进阶设计
2026/10/7 18:33:45
万用表测电阻的五个隐藏技巧:从蜂鸣档到SCPI自动化
2026/10/7 18:33:45
企业AI应用底座:大模型落地的关键基础设施
2026/10/7 18:28:44
开源掌机简史:从GP2X到掌上复古游戏库的十五年
2026/10/7 0:01:56
基于sEMG与IMU的手语手势识别:从数据采集到实时部署避坑指南
2026/10/7 0:01:56
装配车间MES落地指南:SimpleMES工单流转、BOM与齐套检查实战
2026/10/7 0:01:56
AI获客怎样减少重复线索?意客AI的原文复用与版本筛选
2026/10/6 15:41:36
Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化
2026/10/7 9:55:49
多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系
2026/10/7 14:02:03
hindsight:面向LLM应用的事后可观测性工程实践
2026/10/6 21:51:29
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/6 22:05:33
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/6 22:06:19
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)