以前设置调试过,那时候是在windows 2003 Enterprise系统上,一直没有成功。
今天下载了win 2003 sp1补丁,重新编译、设置,果然就成功了。
看来,WRK一定是要在windows 2003 sp1上才可以(在xp amd64上也可以);
下面是操作步骤和所遇到的问题:
工具: vmware 6.50,windbg 6.11,wrk 1.2
源代码路径在 D:\WRK\wrk-v1.2
简述调试配置过程如下:
一.编译
编译过程在主机或者虚拟机中都可以进行;但是在主机中编译,windbg会自动搜索加载符号路径和源代码路径;
如果是在虚拟机或者1394连接的被调试机上编译,那么windbg要主动设置符号路径。
1.设置路径
set path = D:\WRK\wrk-v1.2\tools\x86;C:\WINDOWS\system32
2.指定编译目标结构
set arch = x86
3.进入wrk目录
cd D:\WRK\wrk-v1.2\base\ntos
4.编译内核代码,nmake为编译程序
nmake -nologo %arch%=
这里,%arch%= ,其实就是一个替换,等价于 x86=,
命令可以这样写:
nmake -nologo x86=
若要清除中间文件,则加上参数
nmake -nologo x86= clean
dir D:\wrk\WRK-v1.2\base\ntos\BUILD\EXE
//如果发现文件wrkx86.exe, wrkx86.pdb存在,则编译成功
将wrkx86.exe ,halmacpi.dll 拷贝到虚拟机的%windir%/system32下面
二. 更改被调试机的启动项boot.ini
更改后结果如下:
[boot loader]
timeout=15
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="wrk V1.2 debug" /fastdetect /debug /debugport=com_1 /kernel=wrkx86.exe /hal=halacpim.dll
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect
其实,本质上来说,就是用wrkx86.exe来代替ntoskrnl.exe,halmacpi.dll代替hal.dll,只是替换了一下
微内核,其他的外部组件都使用原系统的。所以,用wrkx86启动以后,系统运行特征和ntoskrnl.exe启动的一样。
三,创建named pipe
add->serial port->output to named pipe->use named pipe :
填写pipe名字,\\.\pipe\com_1
其他选项:
the end is server,the other end is a virtual machine
注意: Windows 2003 中的 要与c:\boot.ini 中的/debugPort 的名字一致!
四,设置windbg的启动参数
创建一个windbg的快捷方式,右键-》属性-》目标,如下设置:
C:\WinWDK\7600.16385.0\Debuggers\windbg.exe -b -k com:pipe,port=\\.\pipe\com_1,baud=115200,reconnect
其中,-b --表示刚连接上目标机就马上中断下来;
-k --表示内核调试
com --设置连接目标机的通信端口(此处为命名管道)和波特率;
还可以跟附加参数:
-y -- 设置符号文件路径
-srcpath --设置源文件路径
五,调试,打开windbg,会提示等待连接;
然后,启动虚拟机或1394连接的目标调试机,选择启动wrk系统;短暂的停留后,windbg就连接上目标系统了,
此时,就可以实现源码级调试wrk内核了。不仅调试,甚至可以重新修改,编译内核,呜呼,爽哉。
随便下个断点:bp nt!ntCreateFile ,bp ntCreateProcess....跟踪调试...