首页 > 其他分享 >bochs 调试 com 文件

bochs 调试 com 文件

时间:2022-11-12 12:33:07浏览次数:59  
标签:文件 Bochs com bochs xchg bx 调试

参考: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文件中增加语句xchg  bx, bx,选了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来下断点了。
费力的折腾了一周,才过了这关。希望作者再版时把这部分内容加上,好让大家能集中精力学习操作系统。

转载: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,bochs,xchg,bx,调试
From: https://www.cnblogs.com/kuangke/p/16883464.html

相关文章

  • windbg调试kvm windows虚机
    参考:http://m.blog.chinaunix.net/uid-22954220-id-4733247.html准备2台虚机,一台target目标机,用于运行要调试的windows系统(调试内核),一台debug调试机,用于运行windbg,配置......
  • GDB调试(包含ui)
    参考:http://tianyu-code.top/GDB调试/GDB调试之图形化界面(TUI)/目录简介窗口介绍及切换窗口属性窗口刷新TUI模式下指令介绍断点状态显示简介TUI(TextUserInterf......
  • Go进阶36:Goland远程开发调试
    Go进阶36:Goland远程开发调试Go&Rust......
  • 关于Redhat-Linux中-compat-sap-c++软件包的说明
    本文OS版本:RedHatEnterpriseLinuxrelease8.6(Ootpa)还是先说一下compat-sap-c++软件包的作用:InordertorunSAPapplicationscompiledwithcertainnewerGCC......
  • vue3 基础-API-computed
    前些章节讲了一些常用的api如setup,ref,reactive,toRef...等,并以一个todoList的小案例来体现在vue3中如何进行解耦逻辑,以setup函数作为调度的这种后端编......
  • MAUI新生-XAML语法基础:语法入门Element&Property&Event&Command
    一、XAML(MAUI的XAML)和HTML两者相似,都是标签语言(也叫标记)组成的树形文档。每个标签元素,可视为一个对象,通过“键=值”形式的标签属性(Attribute),为对象的属性(Property)、事件......
  • departments/components/add.vue
    <template><!--组件v-modelxxxv-model='abc':value="abc"@input="abc=$event"xxx组件内props:{abc:{......
  • UVA323 Jury Compromise
    UVA323JuryCompromise-洛谷|计算机科学教育新生态(luogu.com.cn)由于选择人数有限制(等于\(m\)),因此考虑将人数设入动态规划的一维。考虑目标是\(D+P\)最大,那......
  • GL-Understanding computers 20221111
    TopicUnderstandingcomputersyourgrandmotherhasneverusedacomputersbefore.Explaintoherhowitworks.Remembertokeepitsimple!Lessonaim:Bytheend......
  • php 项目依赖时使用Composer
    项目依赖管理方案。即使你手工的管理它们,你还不得不处理它们的自动加载问题。目前主要有两个PHP包管理系统:Composer和PEAR,哪个适合你呢?答案是两个都需要。管理单个项目的......