Foxdisk07-如何调试1

栏目: 编程语言 · 发布时间: 7年前

内容简介:在开发过程中,我主要采用两种方式进行调试,一是使用Debug.exe,通过U盘或者光盘,启动DOS,用debug观察程序是否如想象中的写入硬盘指定区域。在早期的版本中,我也曾经去除了写硬盘以及替换MBR的功能,编译了可以在DOS下运行的Foxdisk,方便自己在DOS下对其进行调试。Debug是个很好的工具,当年开发隔离卡和双网隔离计算机的所有底层代码,均是依靠它来进行的,简单而强大。另外一种调试方式则必须借助虚拟机了,我最常用的是使用bochs,它自带的调试功能,允许程序员看到所有的执行过程,当然也包括M

在开发过程中,我主要采用两种方式进行调试,一是使用Debug.exe,通过U盘或者光盘,启动DOS,用debug观察程序是否如想象中的写入硬盘指定区域。在早期的版本中,我也曾经去除了写硬盘以及替换MBR的功能,编译了可以在DOS下运行的Foxdisk,方便自己在DOS下对其进行调试。Debug是个很好的工具,当年开发隔离卡和双网隔离计算机的所有底层代码,均是依靠它来进行的,简单而强大。

另外一种调试方式则必须借助虚拟机了,我最常用的是使用bochs,它自带的调试功能,允许 程序员 看到所有的执行过程,当然也包括MBR的运行,以及如何把控制权转交给Foxdisk。因为Foxdisk是图形模式,进入图形模式之后,debug就没办法发挥作用了,后期所有的开发调试都是借助了bochs才得以进行下去。

当然,所有的调试环境使用的都是X86的汇编代码,intel指令集的参考书得常备手边。

Debug的命令不多,如图1所示,大概20几条,很容易记忆。

Foxdisk07-如何调试1

图1 debug常用命令

以一个例子开始debug的使用,尝试用debug将MBR区(也即硬盘线性地址LBA0)的512字节读出,并存到文件mbr.bin中。在当年流行mbr病毒的时候,这是经常使用的方法。

如图2,使用命令’a’,编写一串汇编指令。

Foxdisk07-如何调试1

图2 读取mbr

Debug中所有数据缺省都是16进制的,int 13实际上表示的是int 0×13(或者说int 13h)。使用int 0×13的02功能,读取mbr所在的位置(磁头0,磁柱0,扇区1)的数据,并拷贝到内存偏移0×200处(当前段)。

使用命令’d’查看读取到的数据。这是Foxdisk中Loader.asm编译后的二进制码,安装的时候写入到了mbr区域。

Foxdisk07-如何调试1

图3 写数据到文件

如图3,命令’w’将把BX:CX寄存器中指定字节数的内容写磁盘文件。因此,首先用命令’r’修改寄存器bx和cx。示例中需要保存的字节数为512个,因此,bx=0,cx=0×200。

‘w 200’的含义是将ds:0×200处的开始的数据,保存指定的字节数到文件中。

为了便于调试,Foxdisk中有些地方插入了标志字符串,比如Loader.asm开始的“LUOB”,这其实也是为了便于debug定位问题。

特将debug常用的命令记录在此,方便之后查看。

-?显示 Debug 命令列表

-a [address]指定键入汇编语言指令的位置。对 address 使用十六进制值,并键入不以

“h”字符结尾的每个值。如果不指定地址,a 将在它上次停止处开始汇编。

-d [range]指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。有如

果不指定 range,Debug 程序将从以前 d 命令中所指定的地址范围的末尾

开始显示 128 个字节的内容。

-t [=address]从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的

值。如未指定地址则从当前的CS:IP开始执行。

-p [=address]从指定地址起执行指令,直到遇到断点,如未指定地址则从当前的CS:

IP开始执行。

-g [=address]从指定内存地址运行当前在内存中的程序。

-u [range]对指定范围内的存储单元进行反汇编。

-r [register]‘r’显示CPU内所有寄存器内容和标志位状态,‘r register name’则修改

某个寄存器内容。比如-r ax 修改寄存器ax的内容。

-q退出debug。

4 total views, 4 views today


以上所述就是小编给大家介绍的《Foxdisk07-如何调试1》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Foundations of PEAR

Foundations of PEAR

Good, Nathan A./ Kent, Allan / Springer-Verlag New York Inc / 2006-11 / $ 50.84

PEAR, the PHP Extension and Application Repository, is a bountiful resource for any PHP developer. Within its confines lie the tools that you need to do your job more quickly and efficiently. You need......一起来看看 《Foundations of PEAR》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具