本文是的Windows Driver Kit的Tools for Software Tracing章节的阅读笔记。
Tools for Software Tracing
WDK提供了一系列的应用程序以及命令行工具来进行软件跟踪。这些工具设计上支持ETW(Event Tracing for Windows)。这些工具可以访问Windows内建的跟踪会话,比如Global Logger trace session和NT Kernel Logger trace session。
为了生成可供追踪用的事件,软件注入生成事件的代码,可以使用WPP software tracing或者ETW。WPP的主要目的是采集开发过程中用于分析和调试的事件;ETW则可以用于任何目的。
WPP需要TMF文件才能解码trace,这些TMF文件要从pdb中生成。每个生成者只能被一个会话跟踪;字符串不能本地化;生成者没有ACL控制,只能避免GUID和TMF被他人获取。
ETW(基于manifest或者tracelogging)的则比较灵活,没有WPP这些限制。
另外,WMI(Windows Management Instrumentation)作为Windows驱动模型的扩展,也可以添加软件追踪功能。
可以作为ETW追踪控制器的工具:
- tracelog
- traceview(既是控制器又是采集者)
可以作为ETW采集器的工具
- tracefmt
- traceview
tracelog的用法示例
rem 开启一个会话
tracelog -start session1
rem 停止一个会话
tracelog -stop session1
rem 更新一个会话,指定-rt选项,即实时记录
tracelog -update session1 -rt
rem 启用一个通道,这里使用*AnEtwProvider作为通道名
tracelog -enable session1 -guid *AnEtwProvider
Debugging Tools for Windows (WinDbg, KD, CDB, NTSD)
Download Debugging Tools for Windows 下载WinDbg Preview或者老式的WinDbg(包含着Windows SDK中)
Microsoft public symbol server,调试符号表可以从服务器下载:
set _NT_SYMBOL_PATH=srv*DownstreamStore*https://msdl.microsoft.com/download/symbols
- Getting Started with Windows Debugging讲怎么使用WinDbg。
- Debugging Resources调试用的资源。
- Symbols for Windows debugging (WinDbg, KD, CDB, NTSD)讲如何获取符号表。
- Analyze crash dump files by using WinDbg讲如何进行程序的dump检查。
- Debugger Reference 调试相关的索引资源。
其他
- https://docs.microsoft.com/en-us/windows/win32/diagnostics
- https://docs.microsoft.com/en-us/windows/win32/events/windows-events
- https://docs.microsoft.com/en-us/windows/win32/tracelogging/trace-logging-portal
- https://ruxcon.org.au/assets/2016/slides/ETW_16_RUXCON_NJR_no_notes.pdf
- https://docs.microsoft.com/en-us/openspecs/blog/ms-winintbloglp/- dd98b93c-0a75-4eb0-b92e-e760c502394f
- https://docs.microsoft.com/en-us/windows/win32/tracelogging/tracelogging-net-examples
- https://channel9.msdn.com/posts/Introducing-Semantic-Logging
- https://channel9.msdn.com/Events/Build/2017/P4099
- https://github.com/dotnet/runtime/issues/25801
- https://github.com/microsoft/krabsetw/issues/44
- https://www.mdsec.co.uk/2020/03/hiding-your-net-etw/
- https://stackoverflow.com/questions/11957913/- etw-custom-controller-and-consumer-provider-using-net-4-5-eventsource
- https://github.com/fireeye/pywintrace
(本篇完)