nt!KeWaitForSingleObject 不带参数

2024-01-08

我目前正在尝试调试系统死锁,但我很难理解这一点。

Child-SP          RetAddr           : Args to Child                                                           : Call Site
fffff880`035cb760 fffff800`02ecef72 : 00000000`00000002 fffffa80`066e8b50 00000000`00000000 fffffa80`066a16e0 : nt!KiSwapContext+0x7a
fffff880`035cb8a0 fffff800`02ee039f : fffffa80`0b9256b0 00000000`000007ff 00000000`00000000 00000000`00000000 : nt!KiCommitThreadWait+0x1d2
fffff880`035cb930 fffff880`0312a5e4 : 00000000`00000000 fffff800`00000000 fffffa80`079a3c00 00000000`00000000 : nt!KeWaitForSingleObject+0x19

为什么 KeWaitForSingleObject 的第一个参数为 null?

除非我误解了,第一个参数不是正在等待的对象吗? 死锁仅仅是因为该线程没有等待任何东西还是这是普通行为?

此外,我看到另一个进程(services.exe)显示类似的堆栈跟踪:

1: kd> .thread fffffa800d406b50
Implicit thread is now fffffa80`0d406b50
1: kd> kv
  *** Stack trace for last set context - .thread/.cxr resets it
Child-SP          RetAddr           : Args to Child                                                           : Call Site
fffff880`09ed4800 fffff800`02ecef72 : fffffa80`0d406b50 fffffa80`0d406b50 00000000`00000000 fffff8a0`00000000 : nt!KiSwapContext+0x7a
fffff880`09ed4940 fffff800`02ee039f : 00000000`000000b4 fffffa80`0b1df7f0 00000000`0000005e fffff800`031ae5e7 : nt!KiCommitThreadWait+0x1d2
fffff880`09ed49d0 fffff800`031d1e3e : fffffa80`0d406b00 00000000`00000006 00000000`00000001 00000000`093bf000 : nt!KeWaitForSingleObject+0x19f
fffff880`09ed4a70 fffff800`02ed87d3 : fffffa80`0d406b50 00000000`77502410 fffff880`09ed4ab8 fffffa80`0b171a50 : nt!NtWaitForSingleObject+0xde

这个线程本质上是在等待自己吗?


您正在调试 64 位进程。

记住 x64 调用约定,对此进行了解释here http://en.wikipedia.org/wiki/X86_calling_conventions#Microsoft_x64_calling_convention。前 4 个参数在寄存器中传递。之后,参数被压入堆栈。

很遗憾,kv盲目地显示堆栈参数。事实上,它很难(有时甚至不可能)确定调用时前 4 个参数实际上是什么,因为它们可能没有存储在任何可以恢复的地方。

所以,你正在看第五个参数nt!NtWaitForSingleObject http://msdn.microsoft.com/en-us/library/windows/hardware/ff553350%28v=vs.85%29.aspx,其中一个nullptr是一个非常典型的论点Timeout.

幸运的是,对于我们调试类型来说,一切都没有丢失!有一个 Windbg 扩展,它会在调用函数时尽力重建参数。扩展名为CMKD http://www.codemachine.com/tool_cmkd.html。您可以将扩展 DLL 放入您的winext文件夹并像这样调用它:

0:000> !cmkd.stack -p
Call Stack : 7 frames
## Stack-Pointer    Return-Address   Call-Site       
00 000000a408c7fb28 00007ffda95b1148 ntdll!NtWaitForSingleObject+a 
    Parameter[0] = 0000000000000034
    Parameter[1] = 0000000000000000
    Parameter[2] = 0000000000000000
    Parameter[3] = (unknown)       
01 000000a408c7fb30 00007ff7e44c13f1 KERNELBASE!WaitForSingleObjectEx+98 
    Parameter[0] = 0000000000000034
    Parameter[1] = 00000000ffffffff
    Parameter[2] = 0000000000000000
    Parameter[3] = 00007ff7e44cba28
02 000000a408c7fbd0 00007ff7e44c3fed ConsoleApplication2!main+41 
    Parameter[0] = (unknown)       
    Parameter[1] = (unknown)       
    Parameter[2] = (unknown)       
    Parameter[3] = (unknown)       

请注意,它并不总是能成功找到论点,因为其中一些论点是(unknown)。但是,它做得非常好,并且在调试 64 位代码时可以成为一个非常宝贵的工具。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nt!KeWaitForSingleObject 不带参数 的相关文章

  • Perl:管理 Windows 上的路径编码

    我正在努力处理包含非英文字符的路径 Activestate Perl Windows XP 如何打开 写入 复制等位于包含希腊语 俄语 法语重音字符的路径中的文件 假设我要将 text txt 文件复制到的目录是 C Documents a
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您
  • 如何使用批处理文件创建 EXE 可执行文件? [复制]

    这个问题在这里已经有答案了 我希望能够简单地运行 Windows 批处理文件并让它创建 exe 可执行文件 我知道您可以使用以下脚本批量创建文件 echo off echo This will be in a text file gt gt
  • Windows 控制台支持 ANSI 吗?

    Windows 控制台支持 ANSI 控制字符吗 默认情况下它不支持许多 ANSI 控制字符 维基百科文章中也提到了这一点 http en wikipedia org wiki ANSI escape code http en wikipe
  • 有没有使用 Java 访问 Windows COM 方法的方法?

    我有一个应用程序 它利用 JNA 来调用 C 硬件抽象库中的函数 支持的硬件设备之一需要初始化 Windows COM 子系统 通过 CoInitialize 或 CoInitializeEx 有谁知道有什么 Java 库可以做到这一点吗
  • 在网络驱动器上安装带有 python win32 扩展的 python

    我需要保持大量 Windows XP 计算机运行相同版本的 python 并带有各种模块 其中之一是 python win32 我考虑过在所有客户端机器都安装的网络驱动器上安装python 然后只需调整客户端上的路径即可 Python 从网
  • 微软怎么能说WinAPI中一个字的大小是16位呢?

    我刚刚开始学习WinAPI 在MSDN中 对WORD数据类型提供了以下解释 WORD16 位无符号整数 范围是十进制 0 到 65535 该类型在 WinDef h 中声明如下 typedef 无符号短 WORD 很简单 而且它与我一直在使
  • JNA Windows 服务启动类型

    我一直在使用 JNA 并且能够使用下面的代码返回 Windows 服务的状态 即启动或停止 但我不确定如何返回服务的启动类型 我确信 JNA 之外还有其他方法 但如果可能的话我想继续使用 JNA import com sun jna imp
  • 获取文件夹及其子文件夹中最长文件路径的长度

    我正在寻找一个可以从命令行 批处理 PowerShell 运行的脚本 该脚本将遍历文件夹及其子文件夹 并返回一个数字 该数字是最长文件路径的长度 我已经看到了一些批处理和 PowerShell 脚本 例如 如何在 Windows 中查找路径
  • Powershell DSC Pull 服务器引发内部错误 - Microsoft.Isam.Esent.Interop 未找到

    我已按照 Powershell org 中的说明进行操作DSC Book http powershell org wp ebooks 设置 http Pull 服务器 Windows 2012 服务器 以与 DSC 一起使用 我设置了 ht
  • 如何仅回显“开”或“关”文本?

    大家都知道 在 Windows 命令文件中 cmd echo on echo off 启用和禁用回显 但是如何仅回显文本 on 或文本 off IE 如何发送文本 on off to stdout 目标系统 Windows XP 那么在 D
  • PE 文件中的跳转存根

    最近我反汇编了一个DLL 用c c 编写 发现代码段内有很多 跳转存根 这些存根除了跳转到 DLL 内的函数之外什么也不做 eg jmp foo jmp foo2 为什么编译器 Visual studio 2012 在二进制文件中包含这些函
  • 如何从页眉和/或页脚确定 PE 可执行文件的大小

    假设您有要雕刻的数据流或字节块 如何确定可执行文件的大小 PE 可执行文件格式中有许多标头 但是我使用哪些标头部分来确定 如果可能 可执行文件的总长度 这是文件格式的图片 如果PE文件格式良好 计算可以简化为 伪代码 size IMAGE
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 从命令行启用/禁用 Windows 10 中的设备 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个特定的硬件 我想在每次 Windows 重新启动时禁用并重新启用它 我创建了一个批处理脚本 该脚本应该执行此操作 然后运行我的程序
  • csc.exe 引用外部 .dll 文件

    我正在尝试做一个简单的c 程序使用Growl C API 我尝试用两种不同的方式编译我的程序 我保留了我的 dll文件与我的在同一目录中 cs文件 比我跑的 csc r Growl Connector dll Growl CoreLibra
  • 通过 Wi-Fi 的 ADB 在一台 PC 上非常慢,但在另一台 PC 上则非常慢

    我正在尝试学习如何为 Android 进行开发 并且我希望能够在我的设备而不是模拟器上进行测试 我手机上的 USB 端口变得非常松动 我不想在使用它进行测试的数十个小时中弄乱它 我在桌面上通过 Wi Fi 启用了 ADB 它运行得非常完美
  • 当我使用 SetWindowsHookEx WH_KEYBOARD_LL 交换按键时,为什么我的程序会陷入过多键盘输入事件的循环?

    I am trying to write a program for Windows system that swaps the A and B keys i e when I press the A key B gets typed an
  • 如何使用Powershell变量打开Edge?

    我已经尝试过以下方法 edge New Object com microsoft edge application edge visible true edge FullScreen true 但我收到错误 New Object Retri
  • C++中最大化窗口时的问题

    我的程序需要任意最大化当前桌面上的任何窗口 我通过调用来实现这一点ShowWindow hWnd SW MAXIMIZE 其中 hWnd 是HWND我想要最大化的窗口 当该行代码执行时 相关窗口 此处为记事本 如下所示 一切看起来都很好 除

随机推荐

  • 动画关键帧的 scss 函数

    我想做一个可重用的 sass 函数 让我可以轻松编写 keyframescss 动画 无需编写太多代码 但我不知道如何去做 尤其是数学部分 我有一个包含带有此 css 的单个背景图像的 div height 100vh width 8000
  • 与页面交互时图像质量第二次下降

    当页面以任何方式移动时 窗口大小调整 滚动 悬停 用作图标的图像会重新渲染并使侧面变得粗糙 它在具有透明背景和圆形边框的图像上非常明显 如示例中所示 有什么办法解决这个问题吗 例子 img src http www iconsd
  • 基本 Firebase 数据库保存

    任何人看到下面的内容都是正确的答案 并且我的所有设置都正确 我仍然不知道问题是什么 我用 facebook 登录 用它来创建一个 firebaseuser 对象 然后发送以下内容作为测试数据 我发现这是一个间歇性问题 从设备上卸载应用程序并
  • Reactjs - 控制多个复选框

    我在 Reactjs 中构建了一个 CheckAllBoxes 组件 我有一个物品清单 fruits orange apple grape 将军
  • 如何在不使用“return”语句的情况下退出异步协程?

    我在决定如何打破这个协程时遇到了一些麻烦 如果except声明捕获 通常 我只会使用 def f x try foo var next a volitile generator x except Exception print it bro
  • 如何在 Room 中动态创建新表?

    请帮帮我 在我的应用程序中 用户可以通过按按钮创建新的数据库表 用户还可以稍后访问该表以接收其中的数据 目前我通过 dataBaseHelper 类利用旧的 SQLite 所以我可以 public static void createTab
  • 如何在 Airflow 中的 PythonOperator 中登录 Python 函数

    我在 Airflow DAG 中使用 PythonOperator 并且需要在操作符的 Python 函数中打印一些内容 我尝试打印 但显然没有成功 不太确定这会起作用 接下来我尝试在 PythonOperator 中传递 self log
  • XAML 中的属性 Duration 不允许值类型 Duration

    我正在尝试使用普通的 Windows Metro 风格应用程序执行以下操作 public class MyButton Button public Duration Duration get set
  • 元类冲突:基类和派生类具有不同的元类

    class AbstractBaseClass metaclass abc ABCMeta abc abstractmethod def someMethod class DerviedClass AbstractBaseClass met
  • Sqlite + Java:表未更新

    我正在使用 SQLite 的 Java 包装器 名为SQLiteJDBC http www zentus com sqlitejdbc 这可能会对任何答案产生一些影响 我有一个在 GUI 中显示的表 在该 UI 中 我有一个用于该表的单个行
  • 地址可达性 - 服务器和端口 - iOS 5

    我正在尝试检查服务器是否在线或离线 连接到服务器时我面临一个问题 即它有一个端口 我现在的代码 struct sockaddr in address address sin len sizeof address address sin fa
  • 需要帮助用delphi打印文本文件

    我正在尝试使用 Delphi 2010 打印文本文件 我找到了一些代码 但是当我运行时 它要求保存 xps 文件 但不显示打印对话框 代码位于http www delphipages com forum showthread php t 7
  • curl 可以工作,但不会在 BASH 脚本中执行

    以下curl 命令在命令行中运行 我从服务器得到了有效的响应 curl X POST https somebaseurl api v1 auth login H Content Type application json d email f
  • Jersey / ServletContext 和启动时加载资源

    我是 Java Web 开发领域的新手 我正在开发一个网络服务 我选择了 REST Jersey for it 我想在服务启动时初始化一些东西并保留它们 贯穿整个服务生命周期 第一个问题 构造函数是JerseyServlet 是做这件事的好
  • 解析 Facebook logInInBackgroundWithReadPermissions (Swift)

    我已成功设置 Parse 1 7 1 SDK 和 Facebook v4 SDK 设置桥接头文件和 AppDelegate swift 现在在我的 ViewController 中 我正在尝试创建 Facebook 登录 并且我正在尝试使用
  • read.csv 在 R 中警告“EOF 在引用的字符串中”,但在 EXCEL 中成功读取

    我尝试读取从下载的 csv 文件here https d396qusza40orc cloudfront net repdata 2Fdata 2FStormData csv bz2 我用下面的代码阅读 storm data read cs
  • 网络爬虫的典型礼貌因素?

    网络爬虫的典型礼貌因素是什么 除了始终遵守robot txt 禁止 和非标准 抓取延迟 但是 如果站点没有指定显式的抓取延迟 则默认值应该设置为多少 我们使用的算法是 If we are blocked by robots txt Make
  • RazorEngine 中的 using-Statement(没有 MVC 中的 HtmlHelper)

    我使用的是 RazorEngine 没有 MVC 框架 这意味着我没有用于创建模板的 HtmlHelper 没关系 反正我不需要它的任何方法 但我需要创建自己的方法 例如 BeginForm 现在这些都是用 HtmlHelper ViewC
  • 在 Chrome 上将 drawImage 与 Canvas 结合使用非常慢

    我一直在尝试使用drawImage 将SVG 文件的大量实例绘制到画布上 通过使用 SVG 作为源创建单个图像元素 然后对画布上的每个实例使用 drawImage 我希望即使有大量实例也可以非常快速地在画布中生成合成图像 就性能而言 这在
  • nt!KeWaitForSingleObject 不带参数

    我目前正在尝试调试系统死锁 但我很难理解这一点 Child SP RetAddr Args to Child Call Site fffff880 035cb760 fffff800 02ecef72 00000000 00000002 f