bochs 调试 com 文件 magicbreak
参考 https://blog.csdn.net/housansan/article/details/41833581
在网上看到2中解决此问题的方法:
1.使用dos下的debug32工具单步跟踪pmtest2.com的运行情况。但这个方法存在问题,当跟踪到mov cr0,eax语句时freedos会错误,无法继续跟踪下去。
2.使用bochs的magic_break,方法如下:
在Bochs的配置文件里加上一句magic_break: enabled=1,然后在程序里加上一句xchg bx,bx,运行到这条指令时会断到Bochs调试器里(在Bochsrc_sample.txt里)。
网上的留言的大侠使用该方法成功了,可惜我没成功,网上回了个贴,说了一下自己的操作流程,等待回复中。
今天终于把这个方法实验成功了,前面失败的原因是没有把新编译成的pmtest.com文件拷贝到pm.img文件中。下面把整个步骤完整的列一下:
1)修改bochsrc文件。
在文件末尾增加“magic_break: enabled=1”
2)pmtest.asm文件中增加语句,选了2个地方都没有成功
org 0100h
xchg bx, bx ;我选的位置
jmp LABEL_BEGIN
3)用nasm编译新该的asm文件,并拷贝到pm.img中
sudo mount -o loop pm.img /mnt
sudo cp pmtest.com /mnt
sudo umount /mnt
4)启动bochs
bochs -f bochsrc
5)选择6
Please choose one: [6]
让bochs运行
<bochs:1> c 回车
6)在freedos中进入b盘,运行pmtest.com
7)在bochs的调试窗口中将会停在xchg bx,bx处。提示如下:
(0) Magic breakpoint
Next at t=89456572
(0) [0x00032342] 3224:0102 (unk. ctxt): jmp .+643 (0x000325c8) ; e98302
<bochs:2>
这样我们又可以用前面的方法单步调试程序了。
3.使用bochs的vb命令和 Edit options实现
参考http://blog.csdn.net/titer1/archive/2010/04/28/5540362.aspx,上面图文并茂讲的很清楚。
vb命令需要seg:ofs格式来设置断点,那如何知道seg和ofs值呢?
在网上看到一个方法:在你想下断点的位置前增加语句jmp $,当pmtest在dos下运行起来后回到bochs调试窗口,按下ctrl+c,bochs将会停在jmp $的位置,并显示出seg:ofs。我们就可以用这个值和vb来下断点了。
费力的折腾了一周,才过了这关。希望作者再版时把这部分内容加上,好让大家能集中精力学习操作系统。
我的理解:
在asm文件加入xchg bx, bx语句就相当于在此加了一个断点,运行至此就跳到控制台,可以进行s,c的调试
可以加多个断点,(多句xchg bx, bx)
比如pmtest6.com在初始化PDE和PTE的两个循环前加断点。

效果如图

转载:http://blog.csdn.net/tianzhhy/article/details/5802278
http://blog.csdn.net/programmingring/article/details/7382680
第一种:陷阱
在内存某位置挖一个坑,等着我们的程序跳进去。在程序开头处增加一段代码,访问某内存地址,在Bochsdbg里下该地址的内存访问断点。程序一开始运行……等它跳进来的时候抓住它。
详细过程请猛击这里:http://www.aogosoft.com/downpage.asp?mode=viewtext&id=140
第二种:死循环
在程序开头加一句jmp $让我们的程序死循环,在Bochs里执行这个程序,然后在Bochsdbg里按下Ctrl+C,然后修改EIP寄存器的值 set $eip=XXX 指向我们的程序入口。
前两种都是在网上找到的,都可行,但是比较麻烦,下面这种是天杀老大教给我的,也是Bochs提供的功能。
在程序开始处添加一句xchg bx,bx,然后在Bochsrc.bxrc文件里添加一句magic_break: enabled=1,然后选择调试启动Bochs虚拟机,当执行到xchg bx,bx指令时就会自动断到Bochsdbg里。
这种方法在Bochsrc_sample.txt文件里有介绍,但我想很多人都跟我一样没仔细看:-)
bochs 调试 com 文件 magicbreak的更多相关文章
- 用bochs调试自己写的系统引导代码
1 安装和配置bochs 首先从bochs.sourceforge.net里面把BOCHS给download下来,鉴于Windows的普及,仅仅谈BOCHS在win下的使用方法,其实在其它的OS中方法 ...
- 利用bochs调试Linux 0.11内核
引导程序调试软件bochs,跟配套的linux0.11内核img下载地址分别是: http://sourceforge.net/projects/bochs/http://www.oldlinux.o ...
- 使用bochs调试汇编程序
使用bochs调试汇编程序 前面我们已经搭建好了bochs的环境,并且将我们的汇编程序写入了硬盘里面,现在我们来看看如何通过bochs来调试我们的程序. 前文:https://www.cnblogs. ...
- C#报错:创建调试信息文件 ……obj\Debug\model.pdb: 拒绝访问
错误:创建调试信息文件“.......\obj\Debug\model.pdb”时发生错误 --“......\obj\Debug\model.pdb: 拒绝访问. 解决办法如下: 删除该项目下的 b ...
- 如何设置、查看以及调试core文件
http://blog.csdn.net/xiaoxiaoniaoer1/article/details/7740820 1.core文件的生成开关和大小限制--------------------- ...
- 如何在VC++ 中调试MEX文件
MEX文件对应的是将C/C++文件语言的编写之后 得到的相关文件加载到Matlab中运行的一种方式, 现对于Matlab 中的某些程序运行效率而言, C/C++ 代码某些算法的领域上面执行效率很高,若 ...
- Spark RDD/Core 编程 API入门系列之动手实战和调试Spark文件操作、动手实战操作搜狗日志文件、搜狗日志文件深入实战(二)
1.动手实战和调试Spark文件操作 这里,我以指定executor-memory参数的方式,启动spark-shell. 启动hadoop集群 spark@SparkSingleNode:/usr/ ...
- gdb 调试coredump文件过程
gdb 调试coredump文件过程: 第一步:首先需要一个进程的coredump文件,怎么搞出coredump文件呢? 1. ps -fax|grep 进程名称 找到 ...
- VC6.0 调试.dll文件
对于自己制作的.DLL文件,一直没有比较好的调试方法,其实是知道的太少. 下面就说说VC6.0下面 怎么调试DLL文件: 首先得有一个调用DLL文件的可执行程序,然后调用这个可执行程序. 在工程上 右 ...
随机推荐
- 鸿蒙的多媒体及Menu组件及小程序的多媒体组件
目录: js业务逻辑层 视图渲染层 css属性设置 效果图 微信小程序展示 内网穿透工具下载 我们在搭建一个小程序或者网站的时候,往往要加载很多的图片,音频和视频文件.如果都从服务器获取静态资源,这样 ...
- 前端面试之JavaScript中的闭包!
前端面试之JavaScript中的闭包! 闭包 闭包( closure )指有权访问另一个函数作用域中变量的函数. ----- JavaScript 高级程序设计 闭包其实可以理解为是一个函数 简单理 ...
- 改变JavaScript中函数的内部this指向!
改变JavaScript中函数的内部this指向! 第一种方法 call call 可以 调用函数 + 改变函数内的this指向! var obj = { name: 'lvhang' } funct ...
- (11)-Python3之--os模块
1.模块介绍 os模块是路径处理模块,它提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件.目录打交道 ...
- @functools.lru_cache()
django.views.debug.get_default_exception_reporter_filter @functools.lru_cache()def get_default_excep ...
- https://twistedmatrix.com/documents/current/core/howto/defer.html
https://twistedmatrix.com/documents/current/core/howto/defer.html
- Microsoft Windows的消息循环
https://zh.wikipedia.org/wiki/Microsoft_Windows的訊息迴圈 微软视窗操作系统是以事件驱动做为程序设计的基础.程序的线程会从操作系统获取消息.应用程序会不断 ...
- codevs1700 施工方案第二季
题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的.工兵连受命来到阵地要进行两期施工. 第一期的任务是挖掘暗道让所有地堡互联互通.现已勘测设计了m条互不相交的暗道挖掘方案, ...
- Language Guide (proto3) | proto3 语言指南(十二)定义服务
Defining Services - 定义服务 如果要在RPC(Remote Procedure Call,远程过程调用)系统中使用消息类型,可以在.proto文件中定义RPC服务接口,协议缓冲区编 ...
- ShowDoc,APIDoc,可道云API,语雀-适合IT企业的文档工具
ShowDoc,APIDoc,可道云API,语雀-适合IT企业的文档工具 一.ShowDoc官方文档及说明 1.1 它可以用来做什么 1.2 它都有些什么功能 1.3 使用在线的ShowDoc 1.4 ...