问题标签 [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 投票
1 回答
2325 浏览

windows - 如何在 Windows 上的 x86-64 架构的程序集中注册结构化异常处理程序?

在 x86 中,您可以使用以下 3 条指令简单地注册您的处理程序。

但这不适用于 64 位 Windows。

我已经阅读了 x64 异常处理程序是基于表的,并且 Visual C++__try__except块被硬连接到异常目录中。这是否意味着微软完全放弃了这种旧方法?那么有没有办法从代码中以编程方式注册处理程序?

0 投票
1 回答
1006 浏览

windows - 向量化异常处理过程广泛?

我知道 Windows 会为进程中的每个正在运行的线程单独构建一个结构化异常处理链。我想知道是否使用 veh,注册的异常处理程序将被称为进程范围(无论异常发生的威胁是什么)还是在每个线程的基础上注册?

0 投票
2 回答
2914 浏览

winapi - 使用 RtlAddFunctionTable 的 SEH 处理程序

我一直在尝试通过调用RtlAddFunctionTable. 不幸的是,API 调用返回成功,但我的处理程序似乎从未被调用过。而且我不知道出了什么问题。我的小例子是:

但是,当调用我得到的输出是:

我的处理程序中的消息永远不会打印。

任何帮助/指针将不胜感激。

0 投票
1 回答
3341 浏览

winapi - AddVectoredExceptionHandler 是 SetUnhandledExceptionFilter 的替代品吗?

一些资源似乎建议不要使用SetUnhandledExceptionFilter捕获未处理的异常,而是可以使用AddVectoredExceptionHandler通知所有异常。

但是,据我所知,在确定是否或在何处处理异常之前, “只是”为程序中引发的每个(SEH)异常调用向量处理程序。

我错过了什么吗?

0 投票
0 回答
61 浏览

c# - 例外 - 真正发生了什么?

我看过很多文章和问题,所有这些都集中在异常成本、性能基准等等。

但似乎没有什么能真正解释为什么它这么慢。引擎盖下真正发生了什么,因此当一个人被抛出时,它的幅度会变慢。大多数文章只是说堆栈展开是让它变慢的原因。但我不明白为什么这会使其速度变慢。

从对 SEH 的简要了解来看,基本上每次线程进入 try 块时,它都会在其 TIB 中的异常链上添加某种标记到该位置。这有其成本,同时试图退回堆栈。我理解那部分。但考虑到性能损失的严重性,我怀疑这甚至是故事的一半。另外,如果异常在同一个函数中被捕获,为什么还要展开堆栈。为什么这种情况仍然同样缓慢?

有人可以简单地解释一下到底发生了什么吗?

0 投票
1 回答
165 浏览

windows - 什么是 Windows 上的“异步”信号?

我在这里阅读 pintool 邮件列表中问题的回复。它提到异步信号的传递被延迟到 pintool 中的分析例程结束。我很好奇 Windows 中的哪些异常可以作为异步信号。

0 投票
1 回答
174 浏览

c++ - 如何停止 DLL 中的进程终止异常?

我的 C++ 应用程序正在使用为某些外部软件提供 API 的第 3 方 DLL。这里没有其他选择。这是我必须使用的软件、API 和 DLL。

我正在尝试对我的界面进行防弹。当 API 调用出错时,DLL 会立即终止整个进程。我已经将调用包装在 try/catch 中,我正在使用我在其他项目中成功使用的 SEH 翻译类(并且选择了 /EHa),我什至正在处理 std::unexpected。这些都不会被触发。一旦我调用 DLL 函数,该过程就结束了。

我应该寻找哪些其他途径来保护我的流程?我想避免只为这个 API 分离一个子进程。

0 投票
1 回答
1418 浏览

windows - C++ try-catch 块不捕获硬件异常

我正在检查 Visual Studio 2013 中的硬件和软件异常。我知道我可以通过将“启用 C++ 异常”选项设置为 /EHa(是的,带有 SEH 异常)来捕获硬件异常。我正在尝试捕获以下异常:

EXCEPTION_ARRAY_BOUNDS_EXCEEDED - 没抓到

EXCEPTION_ACCESS_VIOLATION - 被抓到

EXCEPTION_INT_OVERFLOW - 没有捕捉到

EXCEPTION_INT_DIVIDE_BY_ZERO - 捕获

这是一个代码示例。

它只捕获除以零异常。这取决于处理器,还是其他原因?还有一个小问题,调试版本和发布版本之间有什么区别吗?

0 投票
0 回答
883 浏览

c++-cli - 抛出带有消息的 SEH 异常

我有一个使用 C++/CLI 包装器库从 C# 应用程序调用的 C++ 库。在 C++ 代码中,我想在出现问题时抛出异常。它在托管世界中被翻译成 SEHException。但是,原始异常包含的消息自然消失了。

如何将此消息传播到 C#?

  • 我可以以某种方式设置翻译,以便例如MyCppException被翻译为MyManagedException编组消息吗?
  • 我能以某种方式抛出异常,使 SEHException 包含一条消息吗?

我想避免在所有 C++/CLI 包装函数中捕获我的异常并尽可能重新抛出。

0 投票
1 回答
604 浏览

security - 堆栈溢出漏洞利用:RET 与 SEH 覆盖

我一直在研究使用堆栈溢出编写 RET 值和 SEH 覆盖漏洞利用的教程。

据我了解,当我覆盖 SEH 值时,RET 值也会被覆盖,而且进行 SEH 漏洞利用要困难得多,因为您还需要抛出异常才能使漏洞利用运行。

如果是这样,如果我总是可以使用 RET 值,那么 SEH 覆盖利用有什么用?SEH 覆盖优于 RET 覆盖的优缺点是什么?