问题标签 [seh]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
803 浏览

exception - 通过 Wine 强制核心转储忽略 SEH

我想从程序中强制执行核心转储(或以其他方式在特定时间查看其内存)。但是有几个问题:

  • 我在 wine 下运行它(不能通过 winedbg 运行,因为应用程序检测到它)
  • 应用程序使用异常/SEH/其他处理程序,它们捕获非标准事件
  • 即使附加 strace 也会阻止程序工作
  • 我想四处看看,所以没有可以打印的特定区域
  • 嗯...我没有来源

我尝试将代码更改为:

以及一些不是真正指令的随机内容——SEH 介入并拯救了应用程序。

如何获取信息?我需要特定时间的内存映像,并且可以修补它发生的确切位置。

0 投票
2 回答
448 浏览

winapi - UnhandledExceptionFilter 的“应用程序定义”究竟是什么?

MSDN 描述UnhandledExceptionFilter如下:“如果正在调试进程,则将未处理的异常传递给调试器的应用程序定义的函数。”

但是这个函数显然是由操作系统提供的,在 kernel32.dll 根据同一页面。

那么为什么他们称它为应用程序定义的函数呢?

0 投票
2 回答
393 浏览

c++ - 模仿硬件异常

谁能告诉我下一个函数的代码,它会引发 EXCEPTION_FLT_STACK_CHECK 或 EXCEPTION_BREAKPOINT,因为我可以在主函数中捕获它们:

不建议 RaiseException func,我需要一个错误代码的示例,而不是软件引发的异常

UPD:对于下一个异常 EXCEPTION_INT_OVERFLOW,我还需要一个代码片段

0 投票
4 回答
1265 浏览

c++ - 如何抛出 EXCEPTION_FLT_UNDERFLOW?

我需要一个示例代码,它会抛出 EXCEPTION_FLT_UNDERFLOW。我已经有处理该异常的代码。现在我需要样本,它会抛出它。有什么建议吗?

0 投票
2 回答
413 浏览

c++ - Win32 消息调度程序捕获异常的问题

这是一个非常低级的问题,但也许这里有人有一些见识......

我遇到了一个问题,未处理的 SEH 异常(例如访问冲突)似乎在 Win32 消息调度级别被捕获,而不是终止程序。我找到了以下参考博客,它解释了问题,但仅在 WM_TIMER 消息的上下文中:http: //bugswar.blogspot.com/2010/07/why-its-not-crashing.html

我遇到了 Win 2008R2 和“正常”消息(例如:WM_COMMAND 等)的问题。我怀疑它可能是 Windows 试图通过屏蔽异常来“帮助”,但我希望它出错;“继续并忽略”行为通常会导致应用程序出现问题。我意识到我可以尝试将每个函数包装在 try/catch 中,并使用编译器选项 /EHa 将 SEH 异常转换为 C++ 异常(这本身非常令人沮丧和危险),但这显然不是最佳的。

根据引用的博客,TIB 结构 (http://en.wikipedia.org/wiki/Win32_Thread_Information_Block) 中的 AppCompatFlags2 中有一个标志,这可能导致 Win32 处理程序无法捕获/丢弃 SEH 异常,但我没有想法如何设置/启用它。有人对此有任何见解吗?是否可以启用 AppCompat 设置以使 Windows 不捕获和忽略异常?

0 投票
3 回答
1641 浏览

windows - 在 Windows 上捕获子进程异常

我正在开发一个多平台 C++ 模糊测试应用程序。该应用程序生成一个子进程并检查它是否意外停止。我已经设法在 linux 上做到这一点,但是,windows 异常处理机制让我很难做到。

我的代码现在执行以下操作: - 调用 CreateProcess 来生成进程。- WaitForSingleObject 等待它终止。- 然后调用 GetExitCodeProcess 并检查退出代码是否对应异常。

一切正常,我已经使用空解引用测试应用程序对其进行了测试,并且我可以优雅地捕获异常。但是,每次我对此进行测试时,都会出现一个 Windows 错误消息框,告诉我发送或不发送错误报告。由于 fuzzer 应该是一个自动测试应用程序,我需要以某种方式禁用此通知,以便即使捕获到异常,fuzzer 也可以继续测试。

我已经尝试安装 SEH 处理程序,但没有运气(显然这些处理程序不是由子进程继承的)。我读过一些关于使用向量异常处理的内容,但假设它是一样的,我相信向量处理程序不是继承的。

有人可以帮我解决这个问题吗?我不知道要搜索什么,我已经用谷歌搜索了很多,但没有找到任何东西。

谢谢!

0 投票
2 回答
15878 浏览

c++ - Visual C++ 非托管代码:使用 /EHa 或 /EHsc 处理 C++ 异常?

如果我在非托管 C++、Visual Studio 2008 或更高版本中创建一个新项目,我想使用哪种异常处理模型?

我知道 /EHa 选项会导致代码效率降低,并且还会捕获 SEH 异常,对吗?

因此,我一直在避开该选项,并且通常使用 /EHsc,因此我只在 catch(...) 处理程序中捕获实际抛出的 C++ 异常,而不是捕获访问冲突和其他结构化异常。如果我的代码中存在访问冲突,我不希望它被 catch(...) {} 掩盖。

我与其他希望 catch(...) {} 什么都不做的人一起编写代码,如果存在访问冲突,他们甚至希望它这样做,这对我来说似乎是一个非常糟糕的主意。如果由于编码不好而出现错误,您不想将手指放在耳朵里大声说“啦啦啦啦啦!” 这样您就不必让程序崩溃?事实上,如果代码现在因为编码错误而处于不良状态,您真的希望代码继续吗?

所以我的一般想法是 /EHa 创建更大/更慢的代码,它允许程序员编写代码,如果存在致命错误,它将继续在未定义状态下运行。

顺便说一句,我说的是应用程序和服务代码,这是我们大部分时间编写的内容。不是低级设备驱动程序或类似的东西。

请权衡你的想法。

0 投票
1 回答
169 浏览

windows - SEH 异常代码中的第 31 位和第 30 位是什么意思?

我试图找出 SEH 异常代码中这些位的含义。我从 MSDN 关于 RaiseException 的文章中发现系统为系统定义的异常保留了第 28 位。但是,鉴于异常代码0xC0000005,我无法发现它为什么不是0x00000005。位模式是否0xC0000000表明某些东西并没有消失在时间的迷雾中?如果是这样,它是什么?

0 投票
1 回答
6362 浏览

winapi - Win32中的FS寄存器

我正在阅读 SEH 在 Win32 中是如何实现的,我遇到了这个叫做FS register的东西。我在 Google 上找不到任何好东西(很可能我正在寻找错误的东西)。那么任何人都可以解释它是什么吗?

0 投票
1 回答
112 浏览

c++ - 来自标准库调用的结构化异常 (SE)

我有调用 ::fgetpos 的代码,这会导致无法捕获的内核异常(我的 VS 2008 项目中有选项 /ehs)。但我不禁认为标准库例程不应该抛出这些异常。

更新:我尝试调用 ::fgetpos(0, &foo),这显然是错误的,而且我确实收到了内核级异常。我很困惑。为什么 C++ 标准库不执行最基本的参数检查(检查空指针)并引发 std::invalid_argument?

是否有任何标准库例程执行此类基本检查,或者它们是否都愉快地导致程序终止?