【问题标题】:what qualifies as an "asynchronous" signal on windows?什么是 Windows 上的“异步”信号?
【发布时间】:2015-04-08 19:21:41
【问题描述】:

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

【问题讨论】:

    标签: windows exception asynchronous signals seh


    【解决方案1】:

    基本上没有。但那是因为你在错误的词周围有引号。 Windows 没有“信号”。

    让我澄清一下。您指的是Linux,它与UNIX 一样具有signal 机制。这是真正的操作系统级功能。奇怪的是,这个操作系统特性使它成为了 C 语言(不像目录等更有用的东西)。 Windows 不提供 UNIX 信号,因此 Windows 的 C 编译器必须伪造它们。

    Windows 确实有异常,特别是结构化异常。这些处理方式完全不同。例如,它们通常由基于堆栈的异常处理程序处理——这对于“异步信号”甚至没有意义。在 Linux 上,信号处理程序往往保持不变,在 Windows 上,异常处理程序可能会在每次函数调用时发生变化。延迟异常可能会将其传递给完全错误的处理程序。

    【讨论】:

    • 一个可能值得一提的特殊情况:微软的 C 运行时库允许您通过 C 的信号机制来处理 control-C 事件,但其行为不符合 C 标准(具体而言,信号处理程序执行在一个单独的线程中)。
    • @HarryJohnston,控制处理程序线程被 csrss 注入(响应来自 conhost 的 LPC 消息)。它从kernel32!CtrlRoutine 开始。如果进程是BeingDebugged (PEB),它会在执行注册的控制处理程序(包括 CRT 的处理程序)之前通过RtlRaiseException 引发DBG_CONTROL_C。原则上您可以通过CreateRemoteThread 直接调用此函数,但它没有记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2020-07-16
    相关资源
    最近更新 更多