• bochs 调试 com 文件


    参考: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文件里有介绍,但我想很多人都跟我一样没仔细看:-)

  • 相关阅读:
    grafan+cadvisor+prometheus监控docker
    容器化tomcat9.0
    Vue的四种特殊attribute:is key ref v-slot (更新中)
    properties 和 attributes的区别
    vue父子组件(更新中)
    发布者订阅者模式(vue双向绑定原理)
    开发中一些好的逻辑;
    vue项目根据不同环境调用不同请求地址(2)
    linux上删除文件名乱码的文件
    Oracle的SQL优化
  • 原文地址:https://www.cnblogs.com/kuangke/p/16883464.html
Copyright © 2020-2023  润新知