确定谁在使用ws2_32!WSARecv或ws2_32!recv

时间:2014-03-07 23:28:26

标签: windbg

如何确定哪些进程正在使用WS2_32从套接字接收数据?

我想要的是,例如,每当某个进程调用ws2_32!WSARecv或ws2_32!recv时,只需输出一个调用堆栈,以便我知道调用的来源。

我怀疑我可能需要将WinDbg与kb一起使用,但之前从未使用kb进行过真正的内核级调试。我通过串行连接使用cdb和WinDbg PC到PC进行了大量的进程级调试。

我一直在谷歌搜索,但到目前为止,我读过的任何内容都没有给出明确的方法。如果有人能指出我正确的方向,我会很感激。我不怕花时间阅读,我只是不想浪费更多时间去挖兔洞。

提前感谢您的想法。

[edit] 感谢Marc提示使用XPerf以及链接。这正是我所需要的。

2 个答案:

答案 0 :(得分:2)

ETW使用xperf(或Win8.x上的WPA)更适合此任务。文章‘Hidden’ ETW Stack Trace Feature – Get Stacks All Over the Place!完全符合您的要求。

在该文章中,他们正在寻找ws2_32!socket的来电者,因此您可以轻松地按照他们的步骤查找ws2_32!WSASendws2_32!send的来电者。

答案 1 :(得分:1)

这不是一个WinDbg解决方案,但对于那些来到这里但想要在没有内核调试的情况下做类似事情的人来说可能会有所帮助。

Rohitab API Monitor提供API日志记录功能。在API过滤器工具窗口中选择WS2_32.dll,然后检查方法WSARecvrecv

这种方法的缺点:

  • 没有简单的方法只需点击一下即可监控所有流程
  • 它没有提供单个窗口中所有调用的概述,只是每个进程视图
  • 在64位Windows上,您需要并行运行64位和32位版本才能监控所有进程。