1.环境工具

ubuntu 18.04.1

nasm

bochs

2.nasm安装:sudo apt-get install nasm

编译bochs依赖包的安装库:sudo apt-get install vgabios xorg-dev bochs-sdl bochs bochs-x bochsbios bochs-doc libgtk2.0-dev

下载bochs源码,http://bochs.sourceforge.net/,下载最新版本bochs-2.4.6.tar.gz

解压源码包,并进入解压目录bochs-2.6.9,执行

./configure --enable-disasm --enable-debugger

make && make install

3.写一个主引导扇区执行代码boot.asm,并用以下命令编译

nasm boot.asm -o boot.bin

    org 07c00h     ;告诉编译器,程序加载到内存地址07c00hmov ax,csmov ds,axmov es,axcall DispStr    ;调用显示字符串例程jmp $     ;无限循环
DispStr:mov ax,BootMessagemov bp,ax  ;es:bp = 字符串地址mov cx,16  ;cx = 字符串长度mov ax,01301h  ; ah = 13h,  al = 01hmov bx,000ch   ;页号为0(bh = 0) 黑底红字(bl = 0Ch,高亮)mov dl,0int 10h    ;10h号中断retBootMessage:  db "Hello, OS World!"
times 510-($-$$)  db 0    ;填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55    ;MBR结束标志    

4.使用dd命令将boot.bin写进软盘映像disk.img的第一个扇区

dd if=boot.bin of=disk.img bs=512 count=1 conv=notrunc

5.创建bochs启动的配置文件bochsrc,内容如下:

romimage: file=/usr/share/bochs/BIOS-bochs-latest
megs: 32
vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest
floppya:1_44=disk.img, status=inserted

boot:floppy

log: bochsout.txt
mouse: enabled=0

6.执行命令bochs -f bochsrc,会暂停在BIOS中,等待调试

这时,就可以设置断点,物理地址0x7c00,使用bochs的各种调试命令来查看运行情况,命令后面会讲到

最后界面会出现红色字符串"Hello, OS World!"

7.bochs的基本命令大概分为以下几类

(1).断点设置命令

vb/vbreak seg:offset

在虚拟地址上设置指令断点,其中seg和offset可以是以0x开始的十六进制数,或十进制,或者是以0开头的八进制数

lb/lbreak addr

在线性地址上设置断点,addr同上

b/break/pb/pbreak addr

在物理地址上设置断点

info break

显示当前所有断点的信息

d/del/delete n

删除一个断点

(2).执行控制命令

c/cont/continue

连续执行

s/step/stepi [count]

执行count条指令,默认为1条,会跟进到函数和中断调用的内容

p/n/next [count]

执行count条指令,默认为1条,但跳过函数和中断调用

Ctrl+C

停止执行,并回到命令行提示符

q/quit/exit

退出调试和执行

(3)内存操作指令

x /nuf addr

检查位于线性地址addr处的内存内容

xp /nuf addr

检查位于物理地址addr处的内存内容

其中参数n,u,f分别表示:

n为显示内存单元的计数值,默认为1

u表示单元大小,默认值为w

b(bytes)    1字节

h(halfwords)   2字节

w(words)     4字节

g(gaintwords)   8字节

f为显示格式,默认值为x

  x(hex)    显示为16进制数

  d(decimal)  显示为10进制数

  u(unsigned)  显示为无符号10进制数

  o(octal)      显示为8进制数

  t(binary)   显示为2进制数

  c(char)    显示为对应的字符

(4)信息显示和CPU寄存器操作命令

r/reg/regs/registers

显示cpu寄存器及其内容

set $reg=val

修改寄存器的内容,除了段寄存器和标志寄存器以外,其它寄存器都可以修改.

creg

所有CR0-CR4寄存器

sreg

CPU全部状态信息,包括各个段选择子(cs,ds等),ldtr,gdtr等

print-stack

打印堆栈情况

info tab

显示页表

(5)反汇编命令

u/disasm/disassemble start end,反汇编给定线性地址范围的指令

u /10反汇编从当前地址开始的10条指令.

bochs的调试功能可以直接看到cup的执行情况,以及各个寄存器和内存单元的内容,对于掌握程序的运行情况是很有好处的。

转载于:https://www.cnblogs.com/pro-love/p/10947790.html

linux中使用bochs调试helloword引导程序相关推荐

  1. Linux中使用GDB调试NS2

    在使用ns2过程中,避免不了要修改或者添加一些模块,对C++代码进行改动.编写好自己的功能模块以后,进行编译执行.但通常不会这么容易通过,经常会出现编译可以通过,但执行是会出错.比较常见的是" ...

  2. Linux中配置bochs

    配置环境: Ubuntu 12.10+ Bochs 2.6+ NASM 安装NASM: sudo aptitude install nasm bochs2.6下载地址:http://sourcefor ...

  3. Linux中使用Systemtap调试SLUB

    <Linux指令:SystemTap内核跟踪和探测工具> 之前的文章曾利用systemtap的"watchpoint"功能来监测变量数值的变化,但systemtap在内 ...

  4. linux中存放着内核和引导程序的是,Linux操作系统 考试题库

    Linux主流显卡驱动程序安装 1.在Linux目录结构中目录中的文件是普通用户可以使用的可使用的可执行文件的目录是(B)19 A./sbin B./bin C./usr D./lib 2.在Linu ...

  5. Linux中的gdb调试方法总结

    转载于:https://www.cnblogs.com/lanjianhappy/p/6763937.html

  6. Bochs调试Linux内核6 - 启动过程调试 - 跳到bootsect引导程序执行

    接此,​​​​​​Bochs调试Linux内核5 - 启动过程调试 - 认识Bootsect.S_bcbobo21cn的专栏-CSDN博客 看一下,0x00007c11 这里是重复执行串传送:而后一条 ...

  7. Bochs调试Linux内核 - 定位内核中的变量或数据结构

    到此网址下载, http://oldlinux.org/Linux.old/bochs/linux-0.12-080324.zip 解压以后如下: 第一个文件是Bochs安装文件:安装之:安装之后如下 ...

  8. Bochs调试Linux内核5 - 启动过程调试 - 认识Bootsect.S

    先参阅 Bochs调试Linux内核 - 定位内核中的变量或数据结构_bcbobo21cn的专栏-CSDN博客​​​​​​ ,运行到<bochs:1>,输入vbreak 0x0000:0x ...

  9. bochs调试linux内核学习4 - bochs配置文件的$BXSHARE变量、bochs的System BIOS must end at 0xfffff错误、运行内核0.00版本

    经过前面的一些操作,目前只能用bochs调试linux 0.11内核的启动部分:下面来继续学习相关内容: 根据资料,在内核0.11之前,还有更小的内核0.00版本需要认识:在此下载: http://o ...

  10. 使用Bochs调试Linux内核初级入门

    之所以能用Bochs调试Linux内核,还是因为Bochs做了一些工作: 安装完成以后如下:如果使用bochs.exe加载操作系统映像,就是在虚拟机中运行操作系统: 如果使用bochsdbg.exe加 ...

最新文章

  1. 手机数据抓包以及wireshark技巧
  2. show status 优化mysql_mysql优化--show status
  3. 鸡啄米vc++2010系列40(文档、视图和框架:分割窗口)
  4. 为Spring Cloud Ribbon配置请求重试(Camden.SR2+)
  5. pom.xml中排除quartz包
  6. JEESITE快速开发平台(二)环境搭建
  7. 机器学习—LightGBM的原理、优化以及优缺点
  8. Android Json解析工具类
  9. 31个省环境统计年鉴面板数据(2003-2019年)
  10. IDEA 2017破解 license server激活
  11. 网络安全工程师面试题汇总
  12. 如何开通支付宝小程序助手?
  13. java APP支付宝支付
  14. java基础-宇宙第一YWM:数组数算题目记录
  15. 学习java第14天
  16. git、gitlab+jenkens版本控制的安装、升级与灾备
  17. 图说职场贴士:护航职场的八力
  18. vue 移动端语音输入教程
  19. 学生考试作弊行为视频实时检测系统源码
  20. 计算机科学与技术论文提纲,学分有关论文范例,与计算机科学与技术系相关毕业论文提纲范文...

热门文章

  1. 拓端tecdat|【视频】R语言中的隐马尔可夫HMM模型实例
  2. 拓端tecdat|SPSS中的多层(等级)线性模型Multilevel linear models研究整容手术数据
  3. 拓端tecdat|R语言中的岭回归、套索回归、主成分回归:线性模型选择和正则化
  4. 【大数据部落】用R语言挖掘Twitter数据
  5. 练习4.1 根据后序和中序遍历输出先序遍历 (25 分)
  6. word图表自动编号
  7. Jupyter Notebook Config
  8. 总结 图(有向图、无向图、权、度、存储结构、邻接矩阵、领接表 概念)
  9. Learning to Track at 100 FPS with Deep Regression Networks 论文笔记
  10. Sublime Text SFTP 注册码