【问题标题】:Determine who is using ws2_32!WSARecv or ws2_32!recv确定谁在使用 ws2_32!WSARecv 或 ws2_32!recv
【发布时间】:2014-03-07 23:28:26
【问题描述】:

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

例如,我希望在某个进程调用 ws2_32!WSARecv 或 ws2_32!recv 时简单地输出一个调用堆栈,以便我知道调用来自哪里。

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

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

提前感谢您的想法。

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

【问题讨论】:

    标签: windbg


    【解决方案1】:

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

    在那篇文章中,他们正在寻找ws2_32!socket 的呼叫者,因此很容易按照他们的步骤寻找ws2_32!WSASendws2_32!send 的呼叫者。

    【讨论】:

      【解决方案2】:

      这不是 WinDbg 解决方案,但可能对来到这里并希望在没有内核调试的情况下做类似事情的人有所帮助。

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

      这种方法的缺点:

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

      【讨论】:

        猜你喜欢
        • 2018-01-02
        • 1970-01-01
        • 2011-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-09
        相关资源
        最近更新 更多