gpt4 book ai didi

windbg - 在 Windows 7 上使用 grpc 的问题

转载 作者:行者123 更新时间:2023-12-02 01:48:31 25 4
gpt4 key购买 nike

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。有什么建议吗?

最佳答案

在 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 客户端中:传出 COM 调用将前往以下位置:目标进程ID: ? dwo(dwo(@$teb + 0xf80) + 0x100)目标的线程 ID(如果目标服务器是 MTA COM 服务器,则为 0): ? dwo(dwo(@$teb + 0xf80) + 0x104)

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

关于windbg - 在 Windows 7 上使用 grpc 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41204672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com