分享
 
 
 

Bochs 调试技术

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Bochs 调试技术

Freos Hobby OS: Frank Wang / 中国核芯网

对于任何想尝试写自己的操作系统的朋友来说,我都要向你推荐Bochs。这个模拟器最大的好处就是可以单步调试。在没了解它之间,我在写Freos几乎是瞎子,进展十分缓慢,特别是在你没有完成显示器驱动之前,你可以想象,看不到任何出错信息,看不到寄存器状态,这个时候你一定觉得Bochs是你的福星。^_^

这里主要是讲述Bochs的调试命令,如何配置Bochs,请参考bochsrc-sample.txt,写一个自己的bochsrc.txt。Bochsrc-sample.txt的说明很详细,相信应该没有问题。这里是一个作者给FREOS所配置的例子,仅供参考。然后运行bochsdbg.exe(调试模式)。注意:bochs.exe是执行模式,不能调试的。调试模式将出现下列命令行:

bochs:1>

下面初步说明一下每条指令的用法::

执行控制命令

c 继续执行,遇到断点将停止

stepi [count] 执行count条指令, 默认为1条

si [count] stepi的缩写

step [count] 执行count条指令, 默认为1条

s [count] step的缩写

Ctrl-C 停止执行,返回命令行

Ctrl-D 执行完所有命令后,退出

quit 退出调试器

q quit缩写

设置断点

vbreak seg:off 在指定的虚拟地址(段+偏移)设置断点,在保护模式下也可以使用

vb seg:off

lbreak addr 在一个线性地址设置断点

lb addr

pbreak [*] addr 在一个物理地址设置断点

pb [*] addr

break [*] addr

b [*] addr

info break 显示所有断点状态

例如:

--------------------------------------

Num Type Disp Enb Address

1 pbreakpoint keep y 0x00007c00

表示在物理地址0x00007c00设置一个断点,该断点目前有效

---------------------------------------

delete n 删除一个断点

del n

d n

关于物理地址,线性地址和虚拟地址的区别,我只能凭我的理解简单说说,可能不准确。

物理地址在什么时候都存在,但是在采用分页技术和虚拟内存技术后,你很难确定物理地址在那里,所以

建议在实模式下采用物理地址和线性地址形式,这时候物理地址和线性地址其实是一致的。最常用的,比

方说,计算机启动后的地址是0xfff0:0000,装载BIOS,然后转移到0x07C0:0000,所以总可以设置

一个物理断点0x7C00,开始调试你的bootloader。

查看内存

x /nuf addr 查看一个线性地址的内存

xp /nuf addr 查看一个物理地址的内存

n 显示多少个单位的内存

u 内存单位大小,可以是

b 字节

h 字(2个字节)

w 双字(4个字节)

g 4字(8字节)

注意: 它们不太符合Intel字节命名格式,但是遵守GDB约定。

f 打印格式,可以是

x 16进制格式打印

d 10进制格式打印

u 无符号10进制格式打印

o 8进制格式打印

t 2进制格式打印

n,f,和u是可选参数。U和f默认为你最后使用的参数, 如果是第一次使用,u默认为w,

f默认为x, n默认为1。如果没有指定nuf,那么/也可以不要。

setpmem addr datasize val 设置物理地址addr,大小datasize的内存单元的值为val.

crc addr1 addr2 对物理地址范围addr1到addr2进行CRC校验?(没用过)

info dirty 显示写过的页?(没用过)

Info

info program 查看程序的执行状态

info registers 列举CPU整型寄存器遗迹它们的内容

info break 显示当前断点信息

where 打印当前call stack

寄存器操作

set $reg = val 改变寄存器的内容。可改变的寄存器有:

eax, ecx, edx, ebx, esp, ebp, esi, edi.

不可改变的寄存器有:

eflags, cs, ss, ds, es, fs, gs.

例如 set $eax = 0x01234567

set $edx = 25

info registers 显示寄存器内容

dump_cpu 查看所有与CPU相关的寄存器状态

set_cpu 设置所有与CPU相关的寄存器状态

dump_cpu和set_cpu格式如下:

"eax:0x%x\n"

"ebx:0x%x\n"

"ecx:0x%x\n"

"edx:0x%x\n"

"ebp:0x%x\n"

"esi:0x%x\n"

"edi:0x%x\n"

"esp:0x%x\n"

"eflags:0x%x\n"

"eip:0x%x\n"

"cs:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"

"ss:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"

"ds:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"

"es:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"

"fs:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"

"gs:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"

"ldtr:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"

"tr:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"

"gdtr:base=0x%x, limit=0x%x\n"

"idtr:base=0x%x, limit=0x%x\n"

"dr0:0x%x\n"

"dr1:0x%x\n"

"dr2:0x%x\n"

"dr3:0x%x\n"

"dr4:0x%x\n"

"dr5:0x%x\n"

"dr6:0x%x\n"

"dr7:0x%x\n"

"tr3:0x%x\n"

"tr4:0x%x\n"

"tr5:0x%x\n"

"tr6:0x%x\n"

"tr7:0x%x\n"

"cr0:0x%x\n"

"cr1:0x%x\n"

"cr2:0x%x\n"

"cr3:0x%x\n"

"cr4:0x%x\n"

"inhibit_int:%u\n"

"done\n"

反汇编

disassemble start end 反汇编的地址范围

set $disassemble_size = n 告诉调试器,反汇编段的属性(16位或32位,默认32位)。

上述的一些命令都是bochs常用的命令,我是根据bochs自带的英文文档翻译的,同时也结合自己的一些

实际使用体会,错漏、不全面之处,肯定很多,欢迎大家来信探讨或者补充。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有