使附加到lokal内核的windbg或kd表现得像系统范围内的strace

时间:2015-05-05 21:07:36

标签: windows debugging system-calls windb

我正在运行Windows 7,我想在其上进行内核调试,我不想搞乱启动加载程序。所以我按照建议的here下载了LiveKd并使其运行,似乎它正在运行。如果我理解正确,它是某种只读调试。提到Here它非常有限,甚至不能使用断点。我想问一下,在这种模式下是否可以定期转储正在执行的所有指令或基本上所有当前操作系统上发生的事件?我想有一些系统范围的strace(Linux用户知道)并对此进行一些统计分析。我想这取决于更多因素,如已安装的调试符号,以便能够开始解析地址等。

1 个答案:

答案 0 :(得分:1)

我不确定调试器是否是可用于跟踪实时系统调用的最佳工具。正如您所提到的,LiveKd会话非常有限,并且您不允许在其中放置断点(否则您将挂起自己的系统)。但是,您仍然可以使用.dump命令创建内存转储(请检查windbg help:.hh .dump)。请记住,获得正在运行的系统的完全转储(/f)可能需要花费很多时间。

回到问题的主题,使用"转储方法"您将错过许多系统调用,因为您将只在给定时间点拥有系统快照。因此,如果您正在寻找类似于Linux strace的内容,我建议您检查这些工具:

  • Process Monitor (procmon) - 它是一个工具,可以显示系统中的所有I / O请求,以及对注册表或流程活动事件执行的操作
  • Windows Performance Toolkit - 它包含用于收集(WPR)和分析(WPA)系统和应用程序跟踪事件的工具。这可能是很多事件,根据您的需求过滤它们非常重要。 ETW(Windows事件跟踪)是一个很大的主题,您可能需要阅读一些教程或书籍才能有效地使用它(但它确实值得!)。
  • API Monitor - 它是众多(我认为是最好的)跟踪应用程序之一 - 此工具允许您在任何正在运行的进程中跟踪方法调用。它有一个很好的界面,甚至允许你在你想拦截的方法上放置断点。

还有许多其他工具可用于在Windows上进行跟踪,但我会从上面列出的那些工具开始。你也可以查看一本关于这个主题的好书:Inside Windows Debugging。祝好运! :)