【发布时间】:2015-04-08 19:21:41
【问题描述】:
我正在阅读 pintool 邮件列表 here 中问题的回复。它提到异步信号的传递被延迟到 pintool 中的分析例程结束。我很好奇 Windows 中的哪些异常可以称为异步信号。
【问题讨论】:
标签: windows exception asynchronous signals seh
我正在阅读 pintool 邮件列表 here 中问题的回复。它提到异步信号的传递被延迟到 pintool 中的分析例程结束。我很好奇 Windows 中的哪些异常可以称为异步信号。
【问题讨论】:
标签: windows exception asynchronous signals seh
基本上没有。但那是因为你在错误的词周围有引号。 Windows 没有“信号”。
让我澄清一下。您指的是Linux,它与UNIX 一样具有signal 机制。这是真正的操作系统级功能。奇怪的是,这个操作系统特性使它成为了 C 语言(不像目录等更有用的东西)。 Windows 不提供 UNIX 信号,因此 Windows 的 C 编译器必须伪造它们。
Windows 确实有异常,特别是结构化异常。这些处理方式完全不同。例如,它们通常由基于堆栈的异常处理程序处理——这对于“异步信号”甚至没有意义。在 Linux 上,信号处理程序往往保持不变,在 Windows 上,异常处理程序可能会在每次函数调用时发生变化。延迟异常可能会将其传递给完全错误的处理程序。
【讨论】:
kernel32!CtrlRoutine 开始。如果进程是BeingDebugged (PEB),它会在执行注册的控制处理程序(包括 CRT 的处理程序)之前通过RtlRaiseException 引发DBG_CONTROL_C。原则上您可以通过CreateRemoteThread 直接调用此函数,但它没有记录。