问题标签 [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.
windows - 如何在 Windows 上的 x86-64 架构的程序集中注册结构化异常处理程序?
在 x86 中,您可以使用以下 3 条指令简单地注册您的处理程序。
但这不适用于 64 位 Windows。
我已经阅读了 x64 异常处理程序是基于表的,并且 Visual C++__try
和__except
块被硬连接到异常目录中。这是否意味着微软完全放弃了这种旧方法?那么有没有办法从代码中以编程方式注册处理程序?
windows - 向量化异常处理过程广泛?
我知道 Windows 会为进程中的每个正在运行的线程单独构建一个结构化异常处理链。我想知道是否使用 veh,注册的异常处理程序将被称为进程范围(无论异常发生的威胁是什么)还是在每个线程的基础上注册?
winapi - 使用 RtlAddFunctionTable 的 SEH 处理程序
我一直在尝试通过调用RtlAddFunctionTable
. 不幸的是,API 调用返回成功,但我的处理程序似乎从未被调用过。而且我不知道出了什么问题。我的小例子是:
但是,当调用我得到的输出是:
我的处理程序中的消息永远不会打印。
任何帮助/指针将不胜感激。
winapi - AddVectoredExceptionHandler 是 SetUnhandledExceptionFilter 的替代品吗?
一些资源似乎建议不要使用SetUnhandledExceptionFilter
捕获未处理的异常,而是可以使用AddVectoredExceptionHandler
通知所有异常。
但是,据我所知,在确定是否或在何处处理异常之前, “只是”为程序中引发的每个(SEH)异常调用向量处理程序。
我错过了什么吗?
c# - 例外 - 真正发生了什么?
我看过很多文章和问题,所有这些都集中在异常成本、性能基准等等。
但似乎没有什么能真正解释为什么它这么慢。引擎盖下真正发生了什么,因此当一个人被抛出时,它的幅度会变慢。大多数文章只是说堆栈展开是让它变慢的原因。但我不明白为什么这会使其速度变慢。
从对 SEH 的简要了解来看,基本上每次线程进入 try 块时,它都会在其 TIB 中的异常链上添加某种标记到该位置。这有其成本,同时试图退回堆栈。我理解那部分。但考虑到性能损失的严重性,我怀疑这甚至是故事的一半。另外,如果异常在同一个函数中被捕获,为什么还要展开堆栈。为什么这种情况仍然同样缓慢?
有人可以简单地解释一下到底发生了什么吗?
windows - 什么是 Windows 上的“异步”信号?
我在这里阅读 pintool 邮件列表中问题的回复。它提到异步信号的传递被延迟到 pintool 中的分析例程结束。我很好奇 Windows 中的哪些异常可以作为异步信号。
c++ - 如何停止 DLL 中的进程终止异常?
我的 C++ 应用程序正在使用为某些外部软件提供 API 的第 3 方 DLL。这里没有其他选择。这是我必须使用的软件、API 和 DLL。
我正在尝试对我的界面进行防弹。当 API 调用出错时,DLL 会立即终止整个进程。我已经将调用包装在 try/catch 中,我正在使用我在其他项目中成功使用的 SEH 翻译类(并且选择了 /EHa),我什至正在处理 std::unexpected。这些都不会被触发。一旦我调用 DLL 函数,该过程就结束了。
我应该寻找哪些其他途径来保护我的流程?我想避免只为这个 API 分离一个子进程。
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 - 捕获
这是一个代码示例。
它只捕获除以零异常。这取决于处理器,还是其他原因?还有一个小问题,调试版本和发布版本之间有什么区别吗?
c++-cli - 抛出带有消息的 SEH 异常
我有一个使用 C++/CLI 包装器库从 C# 应用程序调用的 C++ 库。在 C++ 代码中,我想在出现问题时抛出异常。它在托管世界中被翻译成 SEHException。但是,原始异常包含的消息自然消失了。
如何将此消息传播到 C#?
- 我可以以某种方式设置翻译,以便例如
MyCppException
被翻译为MyManagedException
编组消息吗? - 我能以某种方式抛出异常,使 SEHException 包含一条消息吗?
我想避免在所有 C++/CLI 包装函数中捕获我的异常并尽可能重新抛出。
security - 堆栈溢出漏洞利用:RET 与 SEH 覆盖
我一直在研究使用堆栈溢出编写 RET 值和 SEH 覆盖漏洞利用的教程。
据我了解,当我覆盖 SEH 值时,RET 值也会被覆盖,而且进行 SEH 漏洞利用要困难得多,因为您还需要抛出异常才能使漏洞利用运行。
如果是这样,如果我总是可以使用 RET 值,那么 SEH 覆盖利用有什么用?SEH 覆盖优于 RET 覆盖的优缺点是什么?