本地内核调试神器 —— livekd 使用总结

简介: 本地内核调试神器 —— livekd 使用总结

说明:本文很早就发布在我的博客上了,当时总结的有些问题,本次重新整理完善后再次发布。

前言

有时候我们非常想知道当前系统内核的一些状态,比如查看当前系统加载了哪些驱动,查看某个进程外 COM 调用卡在哪里了,等等。如果我们可以调试系统内核,或者抓取一个系统转储来做事后调试,该多好啊。我们可以通过如下方法得到系统转储:

  1. 双机内核调试(需要另外一台机器来做双机调试)
  2. 让系统崩溃(可以使用 sysinternals中的 notmyfault 或者 使用快捷键让系统崩溃,并设置 系统崩溃的时候自动保存转储文件)(有点小题大作了:joy:)。
  3. 使用 sysinternals 中的 livekd,不需要特殊设置,绿色环保。

以上几种方案中,使用 livekd 最方便快捷。如果有哪位小伙伴儿对其它几种方法感兴趣,可以查看之前的转储系列文章。为了能顺利使用 livekd,我们需要解决几个问题。

使用帮助

  1. 可以运行 livekd -? 来查看使用方法。
    livekd-help-message
  • 通过 -k 来指定 kd.exe 的路径。
  • 通过 -m 来指定使用 windbg 而不是 kd.exe 作为内核调试器。
  • 可以传递参数给 kd.exe 或者 windbg.exe

问题总结

  1. 使用 livekd 进行本地内核调试,需要管理员权限,没以管理员权限运行会给出对应的错误提示。
    livekd-need-elevate

  2. livekd 需要内核文件的调试符号的支持。
    可以通过环境变量 _NT_SYMBOL_PATH 来告诉 livekd 到哪里加载调试符号。如果没设置也没关系,livekd 会自动下载需要的调试符号到某个位置,遇到下图的情况,输入y即可。
    livekd-promote-symbol

  • 也可以通过命令行参数 -y 来指定符号路径。与使用 _NT_SYMBOL_PATH 效果一样。最好设置环境变量 _NT_SYMBOL_PATH,对所有调试器都有用。

  • 我本地的设置为:_NT_SYMBOL_PATH=SRV*C:\mssymbols\*http://msdl.microsoft.com/download/symbols

  1. livekd 需要内核调试器(kd.exewindbg.exe)的支持,可以通过命令行参数 -k 指定 kd.exe 的完整路径。通过 -k 参数指定 kd.exe 的路径的时候,如果有空格,需要用""包起来,否则可能报如下错误:
    livekd-cant-find-kd
  • 下载符号文件需要 symsrv.dlldbghelp.dll 的支持,请确保 livekd 可以顺利加载这两个文件。
    livekd-fail-to-load-kd

如果出现上图中的错误,请按照提示加上 -vsym 再次运行,可以查看到更详细的问题。我这里是因为不能加载 symsrv.dll 导致的。
livekd-fail-to-load-kd-troubleshooting

  • 如果以上都已经设置正确,但还是报错,可以使用 -vsym 参数查看具体的错误提示。因为最近微软符号服务器在国内连接有点困难。所以大概率会遇到下面的问题。
    livekd-can-not-find-nt-kernel-symbol

    遇到这个问题,没有什么好的解决办法。只能想办法连上微软符号服务器,或者先下载一份对应的文件,放到对应的查找路径下。

说明:

  • 尽量加载与系统版本一致的 kd.exelivekd.exe会根据系统版本运行对应版本的程序(64位系统运行64位的 livekd.exe)。一般情况下 kd.exe 目录下会有对应版本的 symsrv.dlllivekd.exe 会到kd.exe目录下加载 symsrv.dll
  • 如果还是找不到依赖的文件,我们可以把依赖的文件拷贝到 livekd.exe 同目录下再运行。
  1. 如果以上几步设置好了,运行 livekd 应该没问题了。剩下的就是通过livekd -?来熟悉用法了,祝各位好运。贴一张正常运行的效果图。:smile:
    livekd-success

说明:
如果之前没加载过符号文件的话,可能会花一定的时间加载符号。请耐心等待。

总结

  • livekd 可以非常方便的获取一份系统转储,不用预先做任何设置,真是太有用了。

  • -vsym 可谓是排查 livekd 不能正常工作的首要选项。遇到问题,加上它就对了。

  • 调试符号对于调试是极其重要的。

参考资料

  • livekd

  • [Forcing a System Crash from the Keyboard][10]

  • [Remote Debugging Through the Debugger][12]

  • [Generate a kernel or complete crash dump][13]

相关文章
|
11月前
|
机器学习/深度学习 数据可视化 数据安全/隐私保护
抖音留痕脚本,快手小红书微博,自动留痕插件工具
就是用autojs写的一个自动化工具脚本,其实写了好几天,感觉有点价值就分享出来吧 核心代码实现
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
安全 开发工具 虚拟化
使用 VMware + win10 + VirtualKD + windbg 从零搭建双机内核调试环境
使用 VMware + win10 + VirtualKD + windbg 从零搭建双机内核调试环境
|
存储 监控 安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。
|
缓存 JavaScript 前端开发
WebView完全解读
WebView完全解读
1416 133
|
XML Java 数据格式
【Lua基础 第2章】lua遍历table的方式、运算符、math库、字符串操作方法
lua遍历table的方式、运算符、math库、字符串操作方法
1303 0
【Lua基础 第2章】lua遍历table的方式、运算符、math库、字符串操作方法
计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)
计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)
计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)
|
人工智能 搜索推荐 安全
从零到一:微信机器人开发的实战心得
从零到一:微信机器人开发的实战心得
2194 2
|
消息中间件 架构师 NoSQL
以架构师的视角,深入剖析如何设计订单超时自动取消的功能
我们在美团 APP 下单,假如没有立即支付,进入订单详情会显示倒计时,如果超过支付时间,订单就会被自动取消。 这篇文章,笔者想以架构师的视角,深入剖析如何设计订单超时自动取消的功能。
以架构师的视角,深入剖析如何设计订单超时自动取消的功能
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(四)
x64汇编语言与逆向工程基础指南(四)

热门文章

最新文章