Windows Debugging之二

Kernel mode的debugging需要有一个目标机和一个宿主机。目标机运行着内核态的程序,宿主机内运行着debugger。

目标机与宿主机没有必要非要使用同一系统或者同一版本的windows。

内核态debugging不需要特定的自由版本或者检查版本(free version and checked version)的build。宿主机和目标机在free还是checked上没限制。

默认的目标机的debug输出串口为COM2,修改变量debugport可以修改这个。

默认的宿主机的输入串口为COM1. 修改_NT_DEBUG_PORT可以修改这个。

 

Ready目标机

若要让目标机允许内核态的debugging,要修改boot.ini文件,给它添加一个/debug选项。boot.ini一般在C盘根目录下可以找到。如果你使用的是Windows XP,那么请参考http://support.microsoft.com/kb/289022/zh-cn 来寻找修改boot.ini的方式。

一个例子:

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect /MAXMEM=512 /DEBUGPORT=COM1 /BAUDRATE=115200

 

当Windows无法启动,你没有机会编辑boot.ini时,你可以开机时按F8,采用安全模式启动Windows。安全模式只在启动时加载最少的必要驱动和最少的系统设备,如果启动成功,你就可以编辑boot.ini了。

如果启动分区被格式化为FAT,那么你可以使用MS-dos,然后编辑boot.ini. 由于boot.ini是隐藏的,在dos中可以使用如下的命令来看到它:dir /ah.

可以使用如下的命令来去掉它的隐藏和只读属性。attrib –r –s –h boot.ini

 

Ready宿主机

要开始内核态或用户态的debugging,宿主机必须安装所有必要的symbol文件,还要设置一些环境变量。

如下的批处理文件可以帮助你快速设置一些环境变量。

SET _NT_SYMBOL_PATH=z:\symbols\winnt\2195\symbols

SET _NT_ALT_SYMBOL_PATH=z:\symbols\winnt\2195sp1\symbols

SET _NT_DEBUG_PORT=COM1

SET _NT_DEBUG_BAUD_RATE=115211

SET _NT_LOG_FILE_OPEN=z:\debug\debug.log

z:\debug\kd.exe -v -n

 

Symbol文件

Symbol文件保存有各种在运行二进制文件时用不着的信息,这些信息在debugging的时候才比较有用。典型的,Symbol文件中包含有

1. 全局变量

2. 局部变量

3. 函数名和他们的入口地址

4. FPO数据

5. 源代码行号

不管是交互式的debugging还是分析crash dump文件,都需要symbol文件,debugger需要加载它们。

注意:宿主机上安装的symbol文件应该和目标机上安装的windows版本相匹配。

posted on   中道学友  阅读(445)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

< 2009年10月 >
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7

技术追求准确,态度积极向上

点击右上角即可分享
微信分享提示