wrk源码分析之WinDbg+Bochs调试
- 格式:doc
- 大小:31.00 KB
- 文档页数:3
nwindows内核(WRK)编译过程
1.用虚拟机VMware安装一个windows server 2003系统
(以下所指系统如未加说明均为该windows server 2003虚拟机)
2.将WRK源码拷贝到系统下C盘,将文件夹取名wrk(可以任意命名)
3.将系统中的环境变量Path设置为 C:\wrk\tools\x86;%path%
4.(在命令提示符中输入)cd wrk\base\ntos
5.(在命令提示符中输入)nmake -nologo x86=
(内核正在编译...编译完后在wrk\base\ntos\BUILD\EXE下生成内核文件)
6.将wrk\base\ntos\BUILD\EXE下的内核文件拷贝到C:\windows\system32下
7.(在命令提示符中输入)在C:\windows\system32路径下输入link -dump -all hal.dll | findstr p
db命令,查看你的hal按照下面对照:
halacpi.dll -> halacpim.dll ; ACPI PIC-based PC [used by VirtualPC]
halaacpi.dll -> halmacpi.dll ; ACPI APIC-based PC
halapic.dll -> halmps.dll ; MPS
8.进入C:\wrk\WS03SP1HALS\x86目录下,将相应的hal文件夹下的文件(2个)拷贝到C:\windo
ws\system32下
9.进入C盘,将隐藏的文件boot.ini打开,在最后一行加入:
multi(0)disk(0)rdisk(0)partition(
2
)\WINDOWS="test" /kernel=wrkx86.exe /hal=halmacpi.dll
10.重新启动,进入新编译好的内核.
PS:1.注意第9步中,发光的数字"2",该数值应与原来最后一句中的一致(否则进入系统时会出现没
有找到引导盘)
2.如果还是进入不了系统,则下载win2003sp1ch进行系统升级.
wrk源码分析之WinDbg+Bochs调试
wrk源码分析之WinDbg+Bochs调试
我是因调试wrk源代码的需要而开始使用WinDbg的。现在感觉调试windows内核源代码,
WinDbg是当之无愧的最佳选择了。它不仅有丰富的命令可供内核的调试,而且还可以自己
写代码来扩展命令。唯一让人觉得美中不足的是它的脚本实在是弄得太复杂,不过这可以用
WinDbg的扩展功能来弥补不足,即写一个脚本扩展DLL来执行卓如python之类的脚本。
我自己也写过支持python脚本的WinDbg扩展,还是挺有用的。在sourceforge也有一个叫
PyDbgExt的开源软件,可以试试看。在《wrk源代码分析之实验环境》中我已经讲了如何
来做用于wrk源代码调试的WinPE的光盘镜像,但都是在Vmware或者powerPC中调试的。
有了WinPE,我们不仅可以在Bochs下运行它,还可以调试它,并且如果与WinDbg相连,
就可以实现像其它虚拟机一样的源码极的调试!没想到吧?下面我就来介绍介绍我实现
WinDbg+Bochs来调试wrk源代码的的过程。
Bochs,不用说了吧,大名鼎鼎的开源虚拟机软件,可以用于x86和amd64软件的调试,是一
款很好的操作系统调试软件,功能很强大,缺点是比其它虚拟机慢。与其它调试软件合作,
如insight,ddd等可达到源码级的调试效果。但这些软件都是linux下的,虽然有windows的
移植版本,但感觉不太好用,这也是我要介绍WinDbg+Bochs调试的原因之一了。
好,进行正题,如果你用Vmware之类的虚拟机调试过系统软件,那么你知道调试的通信一
般是通过串口来进行的。有些软件,像Vmware还支持命名管道的通信方式。这样就可以很
方便的用Windbg+Vmware来调试了。但是怎样用WinDbg+Bochs实现调试呢?我最先想
到的是用虚拟串口软件,如VSPM,虚拟出两个串口,利用Bochs和WinDbg的串口调试功
能,来进行这两者之间的通信,只可惜试了老半天也没有试出来,WinDbg在显示connecting…
之后就再也没的反应了。而在Bochs中运行的WinPE在启动到>>>>>>>>>时多停了一段时
间以后又继续执行了。难道真的就没有办法了吗?实在是不甘心啊,这明明是可以实现的功
能啊!WinDbg不是也支持命名管道的调试方式吗,但是Bochs不支持,所以想用管道的方
式来进行WinDbg和Bochs之间的通信是行不通的了。但Bochs是开源的,在看了Bochs
的相关串口通信部分的源代码之后,决定自己给Bochs加上命名管道通信的功能。好,说干
就干,在经过了不断的编译,调试之后,Bochs上运行的WinPE终于可以和WinDbg通信了!
虽然命名管理通信的代码不会难写,但是要将它加入到Bochs中,还要与WinDbg通信,却
着实费了我一翻功夫,这其中的酸甜苦辣也只有自己能体会到了:从最初的把经测试工作正
常的代码加入Bochs 之后却怎么调也不能使WinDbg有反应时的沮丧到突然之间有一次
WinDbg终于输出了熟悉的信息后的欣喜若狂到一次次的查找有时能通信有时不能通信的困
惑再到发现原因居然是Bochs的串口输出太快而不是太慢的惊讶,如此这翻心情的风云变
幻,恐怕在除编程的过程中会有之外,再难遇到了。
呵,这就是让人又爱又恨的编程!
要完整源代码的可以留下email,我会在
附:Bochs的配置文件。
romimage: file=$BXSHARE\BIOS-bochs-latest
megs: 64
vgaromimage: file=$BXSHARE\VGABIOS-lgpl-latest
#WinPE的光盘镜像
ata0-master: type=cdrom, path="T:\WinPE2003_SP1.iso"
boot: cdrom
log: bochsout.txt
#管道方式
com1: enabled=1, mode=pipe, dev=pipe\com_1
parport1: enable=0
vga_update_interval: 300000
keyboard_serial_delay: 200
keyboard_paste_delay: 100000
floppy_command_delay: 50000
ips: 4000000
mouse: enabled=0
private_colormap: enabled=0
fullscreen: enabled=0
screenmode: name="sample"
i440fxsupport: enabled=0