【发布时间】:2011-04-20 08:25:07
【问题描述】:
我正在寻找相当于Systrace 或至少strace 的Windows。我知道 StraceNT,但想知道是否还有其他选择。具体来说,我正在寻找一种以编程方式强制执行系统调用策略的特定方法,尽管这可能是事后而不是主动阻止它们。
目前有什么好的方法吗?
【问题讨论】:
我正在寻找相当于Systrace 或至少strace 的Windows。我知道 StraceNT,但想知道是否还有其他选择。具体来说,我正在寻找一种以编程方式强制执行系统调用策略的特定方法,尽管这可能是事后而不是主动阻止它们。
目前有什么好的方法吗?
【问题讨论】:
【讨论】:
有几个工具都是围绕 Xperf 构建的。它相当复杂但非常强大——参见quick start guide。 Windows Performance Analysis 页面上还有其他有用的资源
【讨论】:
WinDbg 的 Logger.exe 最接近 strace:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/logger-and-logviewer
编辑:还有windbg的重量:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/wt--trace-and-watch-data-
【讨论】:
这是一篇非常有趣的文章,我不知道它是否达到了您正在寻找的目标,但我想您可能会发现它会引导您朝着您想要的方向前进。
http://jbremer.org/intercepting-system-calls-on-x86_64-windows/
【讨论】:
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%,但在运行新代码(例如启动大型桌面应用程序)时要高得多),这可能适合您的目的,也可能不适合您的目的。
【讨论】:
API Monitor 看起来对这个目的非常有用。
【讨论】:
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 复制到您想要的位置并使用它。
【讨论】:
strace notepad。它启动记事本,但不捕获任何系统调用。
您可以使用 Mark Russinovich 编写的进程监视器。这是一个很棒的小应用程序,它允许您附加到系统上任何正在运行的进程,并查看该进程当前正在进行的所有系统调用。
https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx
【讨论】: