You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Edge.exe右键地址栏挂起的Windbg分析及技术咨询

问题解答

1. 验证GetClipboardData的UINT参数地址

GetClipboardData的第一个参数uFormat在x64调用约定下存放在rcx寄存器中,不能直接默认00007ffd4105a100是参数地址,需通过以下步骤确认:

  • 切换到挂起线程:执行 ~615c s
  • 查看寄存器上下文:执行 r,rcx的值即为uFormat参数
  • 回溯用户态调用栈:执行 k,找到用户态的GetClipboardData调用帧,用 dv 命令查看该帧的参数,进一步验证

2. 正确查看KUSER_SHARED_DATA结构体

KUSER_SHARED_DATA有固定内存地址,不同架构对应地址不同:

  • x64系统:0x7FFE0000
  • x86系统:0xFFDF0000

你之前使用00000000地址必然返回无效值,正确查看命令为:

dt nt!KUSER_SHARED_DATA 0x7FFE0000  // 针对x64转储文件
dt nt!KUSER_SHARED_DATA 0xFFDF0000  // 针对x86转储文件

3. 进一步定位挂起根因的步骤

步骤1:确认线程等待状态

执行 !thread 615c,查看线程的WaitReason和WaitObject字段,判断是等待同步对象(如互斥体、事件)还是陷入死循环。若为等待对象,记录对象句柄,执行 !handle <句柄值> 2 查看对象的所有者与状态。

步骤2:检查剪贴板相关线程

剪贴板操作是全局同步的,执行 ~*k 遍历所有线程的调用栈,查找是否有其他线程正在执行SetClipboardData、EmptyClipboard、CloseClipboard等剪贴板相关函数——这类线程可能持有剪贴板锁,导致当前线程挂起。

步骤3:查看剪贴板状态

执行 !clipboard 扩展命令,查看剪贴板的当前所有者窗口、已注册格式等信息,判断是否有异常进程占用剪贴板资源。

步骤4:排查第三方挂钩

剪贴板是常见的挂钩注入点,执行 !detours 查看线程是否被第三方模块挂钩,或检查调用栈中是否存在非Edge、非系统的模块(如安全软件、剪贴板增强工具)。

步骤5:分析Edge用户态调用链

从挂起线程的用户态栈回溯,定位到Edge自身模块(如edgechrome.dll、edgehtml.dll)的代码,查看右键地址栏时触发剪贴板操作的业务逻辑,判断是Edge自身bug还是与其他组件的冲突。

内容的提问来源于stack exchange,提问作者Enki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:43:16