【问题标题】:Problems using dbgrpc on Windows7在 Windows 7 上使用 grpc 的问题
【发布时间】:2017-02-02 01:12:33
【问题描述】:

windbg 自带的 dbgrpc.exe 在 Windows 7 下似乎无法正常运行。我按照说明启用了 RPC 状态信息,如MSDN 中所述

我创建了测试进程外 COM 服务器和客户端,在调试器下运行客户端,调用 COM 服务器方法(在返回之前进入方法)并运行 dbgrpc。 我能够枚举 RPC 端点。但是,当我尝试获取这样的线程信息时:

dbgrpc -t -P 1234

没有打印任何有用的东西 - 只是没有任何数据行的标题:

PID CELL ID ST PNO IFSTART THRDCELL CALLFLAG CALLID LASTTIME CONN/CLN


我发现其他人在 Windows 7 上遇到了同样的问题(在 Windows XP 上也可以)。所以,我怀疑这是 Windows 7 的问题(也许是它的安全性)。 WinDbg 中的类似问题 - 没有有用的信息运行 !rpcexts.getcallinfo 0 0 FFFF 1234。有什么建议吗?

【问题讨论】:

    标签: windbg


    【解决方案1】:

    在 Vista 和更高版本上忘记“dbgrpc”,因为它只是不工作。 Vista 和更高版本使用 ALPC(“高级”)而不是旧的 LPC。如果要分析 ALPC 端口和消息,可以对机器进行内核调试并使用命令“!alpc”。但不要指望有太多文档,WinDbg 帮助中甚至都没有提到它。

    为了避免这种内核混乱,我在 COM 存储进程和线程 ID 的线程 TEB(偏移量 0xf80)中使用“ReservedForOle”指针。以下命令可用于 WinDbg 访问它们:

    在 COM-server 中:传入的 COM 调用来自哪里: 调用者的进程ID: ? dwo(dwo(@$teb + 0xf80) + 0x108) 调用者的线程 ID(如果调用者的线程在 MTA 中,则为 0,如果在 NA 中,则为 -1): ? dwo(dwo(@$teb + 0xf80) + 0x34)

    在 COM 客户端中:传出的 COM 调用要去哪里: 目标进程 ID: ? dwo(dwo(@$teb + 0xf80) + 0x100) 目标的线程 ID(如果目标服务器是 MTA COM 服务器,则为 0): ? dwo(dwo(@$teb + 0xf80) + 0x104)

    这些值适用于 32 位进程。对于本机 64 位进程,偏移量会有所不同(例如,“ReservedForOle”位于 TEB 中的偏移量 0x1758 上)。

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 2010-11-29
      • 1970-01-01
      相关资源
      最近更新 更多