【问题标题】:Systrace for WindowsWindows 系统跟踪
【发布时间】:2011-04-20 08:25:07
【问题描述】:

我正在寻找相当于Systrace 或至少strace 的Windows。我知道 StraceNT,但想知道是否还有其他选择。具体来说,我正在寻找一种以编程方式强制执行系统调用策略的特定方法,尽管这可能是事后而不是主动阻止它们。

目前有什么好的方法吗?

【问题讨论】:

标签: windows strace


【解决方案1】:

几个选项:

Process Monitor

另外,请参阅这篇关于 Windows 7 内置工具的文章:

Core OS Tools

【讨论】:

  • 我只是使用 ProcessMonitor 来找出一个进程挂起的原因 - 结果它试图访问一个它无法删除的文件......如果没有 ProcMon 永远不会弄明白
  • 我在 Linux 上使用了很多 strace,并在 Windows 上寻找类似的工具来解决我在使用 NANT 时遇到的问题时遇到了这个问题。我尝试了进程监视器,将过滤器设置为仅包含 Nant.exe 并排除其他所有内容,还设置过滤器以仅在我遇到问题的地方进行注册访问,并快速找出我遇到的问题。我强烈推荐进程监视器。
  • @djhaskin987 :就我而言,我有一个加载一些文件的程序;将它们缓冲到 ʀᴀᴍ (因此没有句柄) 并崩溃。由于没有句柄,左进程监视器无济于事。
  • @hshib :进程监视器的问题是进程不需要句柄来访问文件。所以像我的情况(试图查看哪个配置文件导致崩溃),它没有任何帮助。
【解决方案2】:

有几个工具都是围绕 Xperf 构建的。它相当复杂但非常强大——参见quick start guideWindows Performance Analysis 页面上还有其他有用的资源

【讨论】:

  • strace 与性能无关。它只是打印出进程进行的系统调用。性能工具似乎没有这样做。
【解决方案3】:

【讨论】:

  • 但是,它更像 ltrace 而不是 strace,因为它捕获库调用而不是系统调用。
  • @BrunoMartinez : 使用 strace 不需要指定内存地址。
【解决方案4】:

这是一篇非常有趣的文章,我不知道它是否达到了您正在寻找的目标,但我想您可能会发现它会引导您朝着您想要的方向前进。

http://jbremer.org/intercepting-system-calls-on-x86_64-windows/

【讨论】:

  • 谢谢,很好。我想这意味着我们距离在 Windows 上实现良好且实用的 strace 还有很长的路要走......
【解决方案5】:

Dr. Memory (http://drmemory.org) 工具附带一个名为 drstrace 的系统调用跟踪工具,该工具列出了目标应用程序进行的所有系统调用及其参数:http://drmemory.org/strace_for_windows.html

对于以编程方式强制执行系统调用策略,您可以使用与 drstrace 相同的底层引擎:DynamoRIO 工具平台 (http://dynamorio.org) 和 DrSyscall 系统调用监控库 (http://drmemory.org/docs/page_drsyscall.html)。这些使用动态二进制翻译技术,这确实会产生一些开销(在稳定状态下为 20%-30%,但在运行新代码(例如启动大型桌面应用程序)时要高得多),这可能适合您的目的,也可能不适合您的目的。

【讨论】:

    【解决方案6】:

    API Monitor 看起来对这个目的非常有用。

    【讨论】:

    • 这是一个优秀的程序,显示详细的函数参数/返回值,允许您在满足某些条件时断点,许多不同的挂钩方法,因此它可以用于很多不适合的进程喜欢被检查。
    【解决方案7】:

    strace 可以从 Cygwin 的cygwin package 获得。你可以下载它 来自Cygwin mirror,例如:

    http://mirrors.sonic.net/cygwin/x86_64/release/cygwin/cygwin-2.0.2-1.tar.xz
    #      |                      |                              |     |
    #      +-----------+----------+                              +--+--+
    #                  |                                            |
    #               mirror                                       version
    

    strace 是少数几个不依赖 Cygwin DLL 的 Cygwin 程序之一, 所以您应该能够将strace.exe 复制到您想要的位置并使用它。

    【讨论】:

    • 这很好,但似乎只适用于其他 cygwin 程序。你不能strace notepad。它启动记事本,但不捕获任何系统调用。
    • @MichaelFox :是的,它只捕获对 cygwin1.dll 的调用。
    【解决方案8】:

    您可以使用 Mark Russinovich 编写的进程监视器。这是一个很棒的小应用程序,它允许您附加到系统上任何正在运行的进程,并查看该进程当前正在进行的所有系统调用。

    https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx

    【讨论】:

    • djhaskin987 在他之前的回答中已经提到了进程监视器。您应该编辑他的答案并将您的描述编辑到其中。
    【解决方案9】:

    strace 支持通过安装 Windwos Git,正如 Michael Fox 提到的可能对复杂/windows 软件没有用处。

    【讨论】:

    • 那是Linux程序。它仅适用于 Linus 软件/系统调用。
    • @HenkPoley 不确定你的意思?
    猜你喜欢
    • 2011-08-02
    • 1970-01-01
    • 2012-04-03
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2014-05-07
    相关资源
    最近更新 更多