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版本相匹配。

原文地址:https://www.cnblogs.com/awpatp/p/1592640.html