在Windows7上使用dbgrpc的问题

时间:2016-12-18 01:25:12

标签: windbg

windbg附带的dbgrpc.exe在Windows 7下似乎不能正常工作。我按照说明操作,启用MSDN中所述的RPC状态信息

我创建了测试进程外的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.有什么建议吗?

1 个答案:

答案 0 :(得分:2)

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

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

在COM服务器中:传入的COM呼叫来自哪里: 来电者的流程ID:   ? dwo(dwo(@ $ teb + 0xf80)+ 0x108) 呼叫者的线程ID(如果呼叫者的线程在MTA中,则为0,如果在NA中,则为-1):   ? dwo(dwo(@ $ teb + 0xf80)+ 0x34)

在COM-client中:传出的COM调用将在何处: 目标的进程ID:   ? dwo(dwo(@ $ teb + 0xf80)+ 0x100) 目标的线程ID(如果目标服务器是MTA COM服务器,则为0):   ? dwo(dwo(@ $ teb + 0xf80)+ 0x104)

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