先看下bochs的简介吧,百度的:
Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。更为有趣的是,甚至可以不使用PC硬件来运行Bochs。事实上,它可以在任何编译运行Bochs的平台上模拟x86硬件。通过改变配置,可以指定使用的CPU(386、486或者586),以及内存大小等。一句话,Bochs是电脑里的“PC”。根据需要,Bochs还可以模拟多台PC,此外,它甚至还有自己的电源按钮。
用下来感觉bochs非常小巧,相比于VM功能上并不相差很多,而且对于一些比较“古董”的硬件接口支持比较好,通过.bxrc文件能够很方便的生产和配置硬件。bochs内嵌的调试器比较好用,可以从虚拟机通电加载ROM BIOS起开始调试,对于了解操作系统的详细原理还是很有帮助的。就是没有图形化得调试界面比较蛋疼。。。用惯了VS,Windbg的人有点压力大。。。不过慢慢用就习惯了。
可以去Sourceforge上下载src或者bin:
也可以去oldlinux上下载:
赵炯老师的书上建议调试Linux0.12使用的是bochs2.3.6,但经我实测发现最新的版本(现在是2.4.6)也是也是兼容的,而且2.4.6的调试指令相比老版本有不少的改进,所以还是建议使用最新的版本。
安装和配置比较简单,windows的话只要下一步就OK;
linux上编译src需要在编译时设置编译选项:
b addr
lb
vb 在虚拟地址上设置断点 addr为段基址:偏移地址, cs段
c
n
s
s num ( s指令后加一数字)
dump_cpu
x /nuf addr
n 显示的数据长度
u 数据单元大小 b,h,w,g分别对应1,2,4,8字节
f 数据显示格式 x,d,u,o,t,c分别对应十六进制、十进制、无符号十进制、八进制、二进制、字符串
u [/count] start end
(count
info指令组
info b
info dirty
info program
info r|reg|rigisters
info cpu
info fpu
info idt
info ivt
info gdt
info tss
info cr
info flags
寄存器查询
r 查看通用寄存器
sreg 查看段寄存器(es,cs,gs,ss,fs,ds以及idt,gdt,ldt,tr)
creg 查看控制寄存器(cr0,cr1,cr2,cr3)
dreg 查看调试寄存器(dr0-dr7)
这里再插一句,标志寄存器的查看方法:
eflags
eflags 0x00000046: id vip vif ac vm rf nt IOPL=0 of df if tf sf ZF af PF cf (ZF,PF置位)
0x00000002是标志寄存器的实际数值,后面的zf,sf等为标志位,小写时标志位未置位,大写为已置位。(刚刚用bochs时为这个问题费解了好久。。。)
关于在linux0.12系统上编译0.12内核:
从前文下载的根文件系统rootimage-0.12上已经包含了0.12内核的源码,位于/usr/src/linux。使用make命令编译源码,生成引导区启动镜像文件Image。通过命令dd bs=8192 if=Image of=/dev/fd0 将生成的镜像输出到虚拟软盘文件bootimage-0.12-hd上(记得先备份一个啊!),再次启动bochs,即可由新的镜像引导启动了。
转自:http://blog.sina.com.cn/s/blog_9d34f4d701018o0d.html
查看寄存器信息:info cpu/r/fp/sreg/creg
查看堆栈:print-stack
查看内存物理地址内容:xp /nuf addr |eg:xp /40bx 0x9013e
查看线性地址内容:x /nuf addr |eg:x /40bx 0x13e
反汇编一段内存:u start end |eg:u 0x30400 0x3020D