Windows 中崩溃进程的可预测退出代码

2023-12-21

对于Windows中正常退出的进程来说,进程的退出码一般是以下的返回值:main,或传递给的退出代码std::exit. %ERRORLEVEL%然后可以用于查询退出代码,并且可以用于确定程序是否正确执行,或者是否存在一些指示特定问题(特定于应用程序)的异常输入/失败。

但是,我对进程崩溃时的退出代码感兴趣。举一个非常简单的示例程序:

int main()
{
    int * a = nullptr;
    *a = 0xBAD;
    return 0;
}

当我编译它并在 Windows 中运行时,我在命令行上得到:

MyCrashProgram.exe -> crashes
echo %ERRORLEVEL%  -> -1073741819

退出代码始终是这个数字。这让我想到几个问题:

  • 是退出代码-1073741819基于无效的写入崩溃,可以以某种方式预测吗?
  • 如果是这样,是否有某种方法可以根据退出代码确定崩溃的类型?
  • 这会随着所使用的编译器(我使用的是 MSVC 2012)而改变吗?
  • 这会随着所使用的 Windows 版本(我使用的是 Win10 TP)而改变吗?
  • 这会随着架构而改变吗(例如 x64 - 我使用 Win32)?

请注意,我对如何修改程序来捕获异常不感兴趣。我感兴趣的是对现有程序中可能发生的崩溃进行分类,我可能无法修改这些崩溃。


评论关于STATUS_ACCESS_VIOLATION,引导我找到有关的文档GetExceptionCode https://msdn.microsoft.com/en-us/library/windows/desktop/ms679356(v=vs.85).aspx:

The return value identifies the type of exception. The following table identifies the exception codes that can occur due to common programming errors. These values are defined in WinBase.h and WinNT.h.

EXCEPTION_ACCESS_VIOLATION映射到STATUS_ACCESS_VIOLATION在下面的列表中。列表中所有带有前缀的异常STATUS直接定义为前缀为的异常代码EXCEPTION。按照文档RaiseException https://msdn.microsoft.com/en-us/library/windows/desktop/ms680552(v=vs.85).aspx,它解释了异常发生时尝试调试的过程,最后一步是:

If the process is not being debugged, or if the associated debugger does not handle the exception, the system provides default handling based on the exception type. For most exceptions, the default action is to call the ExitProcess function.

所以回答我的问题:

  • 是的,退出代码是可预测的,它映射到EXCEPTION_STATUS_VIOLATION.
  • 其他类型的错误将映射到其他常见异常代码。但是,通过使用任意异常代码(未处理)调用 RaiseException,进程的退出代码可以是任何内容
  • 退出代码取决于 Windows SDK,而不是执行 Windows 版本或体系结构的编译器。尽管理论上这可能会随着较新的 ​​Windows SDK 的出现而改变,但这对于向后兼容来说是不太可能的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 中崩溃进程的可预测退出代码 的相关文章

  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 自定义波特率,redux

    我遇到的问题详述如下自定义波特率 https stackoverflow com questions 7714060 custom baud rate SetCommState 波特率 921600 失败 但波特率 115200 成功 尽管
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 页面上所有脚本完全加载后运行js函数

    当我的页面完全加载时 我试图运行一个简单的 JavaScript 函数 例如这个函数 我的页面有一个从外部 URL 检索的长时间加载 秒 脚本 该脚本呈现 html 正文中的主要内容 我正在使用 Bootstrap 其中我的主体部分base
  • 如何使用 glide 下载存储在 firebase 中的图像的缩略图

    我想从我的 firebase 存储中下载图像缩略图而不是整个图像 我正在使用 glide 来加载图像 但我不知道如何加载图像缩略图 因为它会更快且内存效率更高 您首先需要为图像创建缩略图 可能使用类似谷歌云功能 https cloud go
  • 使用 PyPdf2 更改 pdf 书签的顺序

    我创建了一个应用程序 将多个 pdf 与书签合并 如果原始pdf已经有书签 我想保留它们并在pdf的开头添加一个书签 我使用以下代码 title和path代码中的内容来自用户输入 from PyPDF2 import PdfFileRead
  • Windows 过滤平台可从托管代码中过滤 HTTPS

    我想为Windows开发一个基于主机的防火墙 主要是过滤以HTTPS开头的URL 我知道 Microsoft 正在将 WFP 作为已弃用的旧技术的替代品 例如防火墙 过滤器挂钩 NDIS TDI WSA 和 Winsock 2 LSP 但
  • 尝试序列化 GPathResult 时,Groovy XmlUtil.serialze() 抛出“序言中不允许内容”错误

    我在 Groovy 的 1 7 3 XmlUtil serialize GPathResult 方法中遇到了一个奇怪的问题 当我使用 GPathResult 调用它时 它会抛出 序言中不允许内容 错误 但 groovy util Node
  • 为什么对 jQuery $.fn.data() 的更改不会更新相应的 html 5 data-* 属性?

    下面是一个简单的示例来说明该行为 给定这个 html 标记 div div 和这个 jQuery 代码 使用 jQuery 1 5 1 read the data alert div data company returns Microso
  • 使用护照持有者的自定义错误消息

    我正在使用护照来保护我的 API 我有点难以理解在出现错误时应该如何发回自定义消息 我希望在这里找到答案 这是我所做的 路由 server js router route Applications get authController Be
  • 处理多个 NSTableView 的最佳方法

    在不使用 Cocoa Bindings 的情况下处理多个 NSTableView 的最佳方法是什么 在我的应用程序中 我有两个 NSTableViews 它们之间的关系足够密切 因此我使用相同的对象作为两者的委托和数据源 问题是两个 tab
  • 求一个数的真正大幂

    I am creating a small game for students and in a place it has to display the value of 27830457 1 如果数字不是那么大 我可以调用 BigInte
  • ReactJS + Socket.IO - 处理套接字连接的最佳方式

    我正在尝试使用 Node 和 Socket IO 制作一个 ReactJS 实时应用程序 但我很难找出在客户端处理套接字连接的最佳方法 我有多个 React 组件 它们都需要来自服务器的一些信息 并且最好通过套接字连接实时获取 但导入时so
  • 具有多个条件的 VLOOKUP 在一个单元格中返回值

    我发现这个 VBA 能够使用一个匹配条件将所有匹配值返回到一个单元格中 Function MYVLOOKUP pValue As String pWorkRng As Range pIndex As Long Update 20150310
  • 输入文件 onchange 事件未在 Chrome 中触发

    这是我在 chrome 中注意到的一件奇怪的事情 如果用户选择一个文件 然后再次打开文件对话框再次选择同一文件 则 chrome 不会触发 onchange 事件 而 firefox 会触发 有人也注意到了吗 这是 Chrome 的一项已知
  • 锁和监视器可以安全地用于同一个对象吗?

    我有以下情况 我想相互排除对对象的访问 到目前为止我通常会使用锁对象 object lockObject new object method1 lock lockObject CODE1 现在我还有一个可以从另一个线程调用的方法 它不应该被
  • 设备中的sign_in_and_redirect如何工作?

    if user persisted sign in and redirect user event gt authentication this will throw if user is not activated set flash m
  • 如何为一组目标创建 Maven 别名?

    我正在配置一个 Maven 项目并希望能够使用别名 例如 mvn server 执行mvn clean package tomcat run Grunt 任务运行器做得很好 但我还没有找到在 Maven 中做同样事情的方法 是否可以 您可以
  • 如何阅读 C 声明?

    我听说过一些方法 但没有一个能坚持下来 就我个人而言 我尝试避免 C 中的复杂类型 并尝试将它们分解为组件 typedef 我现在面临着维护一些来自所谓的 三星级程序员 的遗留代码 并且我很难阅读一些 代码 如何阅读复杂的 C 声明 本文解
  • Autohotkey 多个热键映射到同一功能

    我有几个热键 它们都做同样的事情 我有多个热键 所以我可以在我的手当时在的任何地方调用它们 并且可以在多个键盘上使用 例如 Send Media Next XButton2 RButton Send Media Next SC15D Sen
  • 如何在搅拌机中导出带有纹理的.obj格式文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 First of all i am new in blender i have attached texture from tree ob
  • 爪哇 |整数运算符;

    我用 Java 编程大约一年了 但仍然发现了一些我不知道的东西 如何 new Font FontFamily TIMES ROMAN 12 1 4 如何 可以处理整数吗 谢谢 附 我用谷歌搜索了很多 The 运算符计算 按位或 http d
  • Windows 中崩溃进程的可预测退出代码

    对于Windows中正常退出的进程来说 进程的退出码一般是以下的返回值 main 或传递给的退出代码std exit ERRORLEVEL 然后可以用于查询退出代码 并且可以用于确定程序是否正确执行 或者是否存在一些指示特定问题 特定于应用