新版本Windbg的TTD调试技术
微软的新调试技术TTD
Windows最近改动很大,除了20H1大版本上备受关注的WSL2和新的终端Terminal,其实在调试这块,新版本的Windbg preview也值得期待,开放了原先微软内部使用的一个无比强大的调试功能,TTD调试(Time Travel Debugging),翻译过来貌似就是时间穿越调试法?
windbg有很多版本,正常从微软官方SDK绑定下载的是没有这个功能的,从Microsoft Store中下载的windbg preview版本才可以,preview版本有更现代的界面,当然新功能也无比的牛逼。
我们都知道在windows上的崩溃会生成一个dump的转储文件,dump会记录进程的部分内存,线程的栈信息,可以辅助我们分析程序的bug,那么trace文件是什么呢,trace会动态的记录整个文件的动态运行状态,从第一条指令运行到有记录的最后一条指令,整个进程的内存及线程运行寄存器值栈等等一系列的变化,对于一些偶现而又无法通过dump分析出足够信息的bug,用trace来定位简直如有神助。
当然要说明的是TTD并不是微软特有的技术,mozilla也开源了一个叫rr的调试工具可在linux上运行(内核版本需要大于3.11),rr我以后再写文章介绍。
TTD应用的范围及一些局限
目前Windbg preview只能运行在Windows10以上,想要使用TTD的功能,必须以管理员的特权启动运行Windbg,因为调试的过程需要录制一段trace,录制的原理是需要注入到进程做HOOK的,这个过程可能会受到杀毒软件的影响而导致失败,整个录制的过程仅限制于用户层,陷入到内核空间运行的过程是无法记录的。而且录制过程回放也是一个只读的过程,所以想修改寄存器内存值改变分支的流程是不可能的事,另外一些特别的受保护的系统进程是无法录制的。
录制和回放一个trace
未完待续。。。