2024年5月4日发(作者:)

张嘴 

牛 调 

第15卷第2期 交通与计算机 

v()L.15 No.2 

1997年4月 

Computer and Coramun[cat[ons 

April.1997 

' 

几种动态调试工具软件 

郭冀生 

【武汉交通科技大学 武汉430063) 

般说来,人们把软件工具理解为,为了 系统,它是基于Inte1386指令榘而设计的,进 

软件设计、制作、测试、维护而研制的专用软 

入386DEBUG,便进入了全32位的环境、即 

件,如各种编辑系统,代码生成器、设计规范 

它支持32位的指令、32位数据运算、32位寄 

描述语言、调试和排错系统等。 

存器、32位寻址方法,特别是支持80386的 

人们可根据软件研制的不同阶段,利用 

保护模式。 

不同的软件工具。尤其在软件的调试、排错 

在386DEBUG中,地址均直接用8位十 

过程中往往需要有适合于系统环境的、功能 

六进制数字表示(即32位地址),不同于在实 

较强的调试工。具,如目前常用的. 

方式下的表示形式(段:倡移量)。另外 

386DEBUG、SOURCER、FSD、386/D0S— 

386DEBuG通过运算子或指令前缀完成l6 

Exteder、Dis*Doc等。 

位运算。它具有断点设置,显示和改变内存单 

值得注意的是这些工具均由不同的公司 

元或寄存器内容。I/O操作,单元、多元操作 

研制,往往伴随着不同的系统,有的隐岔在系 

符处理,显示运行结构,全面动态调试,跟踪 

统之中,给用户使用带来不便。本文结合 

系统运行等功能。 

Netware的调试讲就这些调试工具的结构、 

386DEBUG在SERVER.EXE中,且隶 

组成,及其主要功能.适应范围进行了分析和 

属于Polling进程。当服务器操作系统 

比较,有益于人们更好的运用这些工具 

SERVER.ExE引导成功后,在驻留内存状 

1几种典型的调试工具 

态下,进入386DEBUG有兰种途径。 

1)在局域阿系统状态下,局域网程序服 

1.1.Netware中隐含的386DEBUG 

务器异常结束或GPIS服务器之后,输入 

386DEBUG是隐含在网络操作系统 

386DEBUG命令(此命令不回显到屏幕上), 

Netwax ̄386的SERVER.EXE中的莺耍调 

屏幕上出现调试程序的提示符“#”以示进入 

试工具,是适应于系统自身的交互式的程序 

386DEBUG状态。 

2)直接在代码段中放INT3中断指令。 

收穑日期 l997一Ol~lo 

即当服务器操作系统启动成功后,在系统提 

门, 

第2期 郭冀生:几种动态调试工具软件 69 

示符“:”下,系统可以执行不步程序(如 

NOVELL网络操作系统提供的或用户自行 

自动处理被索引的跳转邪调用} 

在大多数TSR(驻留程序)中识别中 

在项(item)的定义处显示交叉索引{ 

开发的可装载模块),此进若将INT3指令放 

断入门; 

入这些程序的代码段中,则在这些程序的执 

行过程中,一且遇到INT3,服务操作系统将 

终止程序韵正常运行,自动进入386DE— 

BUG。 

自动检测设备驱动程序的入门点I 

支持8088/87至80386/387和80486 

对多助记符指令进行更正; 

SRV4.58由27个主要文件组成 

指令集的反汇编} 

例如:ISADISK DSK是Novell网络操 

作系统所提供的ISA硬盘驱动器程序.现将 

该程序中187H处的字节内容改为CCH 

(INT3指令的机器代码).然后在服务器操作 

系统提示符“:”下,加载IsADlsK(LOAD 

ISADISK<Enter))则系统将会进入 

386DEBUG.出现提示符“#”.同时显示 

386DEBUG的版本信息,当前中断原因,寄 

存器内容和下一条要执行的指令。 

3)在系统控制台 : 状态下,键入组合 

键:Ah+ShiIt+Shift+Esc。 

上述三种方式都可在服务器操作系统 

SERVER.EXE的状态下进入386DEBUG, 

般来说.前两种方式多用于调试 

Netware386的可加载模块NLM。第三种方 

式可用于调试当前的服务器操作系统 

SERVER EXE。 

当屏幕上出现 #”后,即可选用 

386DEBUG相应的调试命令,对已驻留在内 

存中的系统软件或程序进行调试。 

386DEBuG有求助,改变显示内存单元 

内容,IIO括号操作符、单元、多元、圆点等ll 

太类命令功能。 

1.2 sOURcER(sR)超级反汇编工具 

SOURCER是一类功能较强的超级反汇 

编软件,可对.EXE.COM,SYS,OVL文件 

进行九遍扫描,能处理大型文件,可对内存可 

执行文件进行反汇编,产生具有详细注释的 

汇编源程序。该软件自推出以来,已有不少版 

本,目前常用的SOURCER高版本有SRV 

4.56,V5.04.它们具有以下特点: 

其中三个批处理文件README.BAT. 

READMES.BAT,READMET.BAT完成对 

整个系统的注释。 

1.3 FSD全屏幕调试工具 

FSD(Full Screen Debug)是IBM公司推 

出的全屏幕调试软件,它与DEBUG的最大 

区别在于它是一个全屏幕集成环境的调试工 

具.所有命令的输入,寄存器值和内存状态等 

都集中显示在一个屏幕上,方便了用户的使 

用。 

FSD V1.4版本主要由FSD.COM. 

FSD.SET两个文件组成.总长度为53KH。 

FSD在IBM PC系列机(包括xT,AT.386, 

PS/2系列及其它所有IBM兼容机)上运行, 

它需要DOS2 0以上的版本。 

当FsD运行后,出现一个满屏主菜单. 

整个屏幕可以分为六大部分,首先是位于屏 

幕上方韵寄存器区。显示CPU寄存器的内 

容.包括: 

通用寄存器:AX,BX,CX,DX,SI,D1, 

IP,BP和SP。 。 

段寄存器:CS,DS,F- ̄S,ss,和FS 

标志寄存器:(FLAGs)O F'DF,IF,SF, 

AF,PF和CF 

另外,还有当前找(Stack)的内容,共4 

个字,“+l0”处为当前栈顶。 

左下方是人机交互区,即CMD)(命令行 

Cammand line),用户根据调试的要求在此区 

内键入合法的命令,即可进行相应的调试。接 

70 交通与计算机 第15卷 

 

着是代码区,显示反汇编程序代码和源程序 

数据段。

行,每一反汇编行的左边以十六进制偏移量 

着显示构成该指令的所有代码,反汇编后的 

3)通过DOS软件中断系统提供系统服 

4)由386 l DOS--Extender捕获中断和 

方式显示指令的地址,缺省的段值为CS,接 

务。 

指令显示在右边,当前程序的执行位置由寄 系统调用,再由386 lOS-D-Extender转换成 

存器IP指示。男外还有两个数据区,一个位 

实方式并将调用传送给DOS,当控制从DOs 

OS-D-Extender又转回到保护 

于代码区的右边,一个在下面,它们显示所选 

返秽厥,386l

内存的原始数据,每行最左边按十六进制的 方式。 

段名,偏移量(倒DS:0100)方式显示所在地 

址,接下来是数据项,第一个数据区每行显示 

8个字节的数据,而第二区则可显示l6个字 

节,且在最右边显示对应的ASCII码字符,两 

区可显示的字节数均为8O。 

屏幕的最后一行即为第六区:提示信息 

区,指出了F1一F1o这个10个功能键的作 

用 

FSD有装入文件、写文件、寄存器操作、 

反汇编、I/O、执行、断点设置、显示模式等命 

令。 

1.4 Phar Lap 386 I DOS--Extender 

Phar Lap 386

DOS--Extender是Phar 

Lap Software Inc公司推出的程序设计系统, 

它允许用户创建在DOS下运行的386保护 

方式程序,Phar Lap 3861DOS ̄Extender用 

个特殊模块(run386.exe)建立386保护方 

式环境,在该环境里,通过32位寻址和扩展 

寄存器,用户能够存取全部虚拟空间(4G字 

节),还能访问386微机的许多先进设备 

(GDT.LDT,IDT表等)。相应Phar Lap程 

序有386/ASM汇编程序,386/LINK连接编 

辑程序以及联机调试程序 386jD0s— 

Extender和全 32操作系统的区别表现在以 

下几个方面: 

1)所有程序在386 lDOS--Extender中 

都以特权级0运行,任何程序都能使用特权 

指令。 

2)连接程序将所有程序段放在一个较大 

物理段中,而该段是可读的代码段和可写的 

5)请求系统调用时,386 l D0s— 

Extender要用250个字节的调用程序的堆栈 

空闻,如多次调用,应使堆栈足够大 

1.5反汇编工具Dis*Doc 

Dis*Doc软件是由RISwantek Inc公 

司开发的功能较强的反汇编软件,采用重叠 

式窗口以及弹出式菜单和鼠标器为用户提供 

了一个快速的交互式接口,联机后帮助系统 

可在操作的各个阶段提供服务。 

Dis*Doc V2.3版本主要由以下十一 

个文件组成。 

DD DAT 

DD ERR 

DD EXE 

READ MEI 

UNPACK EXE 

DEMO · EXE 

DEM0 PSM 

DEM032 EXE 

DDINT TXT 

MAKEINT EXE 

SCOPY EXE 

TELLME EXE’ 

它有反汇编、匹配、帮助等六类命令 

2调试工具的分析比较 

上面对几种反汇编工具作了简要介绍, 

结合这些工具在分析调试Netware时的运行 

状况,从运行环境.被调试程序的限制、准确 

度三方面,进行了分析和比较。 

第2期 郭翼生;几种动态调试工具软件 

2.1工作环境 

FSD、Dis*Doc、DXDEBUG、SOURC— 

只要当前内存足够,388DEBUG就可以调试 

任一大型程序而不受840KB的限制。 

为了减少对被调试程序长度的限制,在 ER和386DEBUG都属于计算机系统中的软 

件范畴,但它们在计算机系统的层次图中所 

调试SERVER.EXE过程中,我们用到Dis* 

处的位置却不相同,FSD、Dis*Doc、 

Doc中的实用程序SCOPY,该程序可将大型 

DXDEBUG和sOuRCER是运行在系统软 的程序细分为等太小的一系列小型文件,而 

件DOS上的工具软件,如图3.25所示,其运 其结构和内容均不变。因此,我们使用 

行必将受到DOS的约束和限制(例如,DOS 

scOPY提供的细分功能,将SERVER.EXE 

能管理的最大内存空间为64OKB)。而 

分成多个小文件,从而便于在不同环境下进 

386DEBUG却是隶属于Novelt网络操作系 行反汇编或调试。 

统Netware中的控制台命令进程。 

正因为Dos仅为运行在Netware上的 

2.3准确度 

准确度主要包括以下三个方面的内容; 

及代码和数据的区分率。 

指令系统是一个计算机所有指令的集 

解释)成以指令形式表示的机器语言后才能 

运行,所以支持的指令系统集这一项将在一 

个进程,因此386DEBuG运行并不受 

调试工具所支持的指令系统集、工作方式以 

DOs的限制(寻址空间和处理速度方面)而 

受限于Netwa ̄,而Netware是基于Intel 

80386指令集而设计的垒32位、多用户多任 

合,用各种语言编写的程序都要翻译(编译或 

务的网络操作系统.寻址范围达2 。 

2.2被调试程序的限制 

般来讲,所有调试工具对其可调试或 定程度上反映调试工具的适应范围,从8088 

装入的程序长度均有一个限制,超过该界限 开始的Intel微处理器系列机的发展已经历 

后,调试工具将不能有效工作或完全不能工 

了5个阶段:8088/8086,80286,80386,80486 

作。 

和Pentium,相应的指令系统分别分8088/ 

8086,80286,80386,80468,和Pentium指令 

从以上分析得知,FSD、DD(Dis*Doc)、 

SOURCER和DXDEBUG都要受到DOS 

系统、指令系统盼功能逐步增强,8088/8086 

640KB的限制,再加上系统软件(DOs)和调 指令系统共有91条指令,而80286指令集除 

试程序自身要占用一定的的内存空间,故留 完全包含了8088/8086的91条指令外,还增 

给被调试程序的空间往往不足800KB(通常 加了26条新指令。Intel微处理器系列机保 

为500KB左右),这样可调试装入的程序无 持了软件向上兼容的特点,即低档机上的软 

疑是有限的 

件可不加修改地在新机型上运行。另外,计算 

有些软件为了克服Dos在内存空间上 机(或微处理器)的工作方式也有了变化,自 

的限制,能支持EMS(tr充内存规范)或 80286起不再是单一的实方式(Real mode), 

xMs(扩展内存规范)管理,从而增加当前可 还增加了保护方式(Protected mode) 两者的 

用内存空间,便于调试更大的程序。 主要区别如下(以38§机为例): 

SOURCER就是其中之一,386DEBUG也是 

地址形式:实方式下为段:偏移重。保 

可寻址范围:实方式下为2 }保护方 

如此,因它在Netware之中,而网络操作系统 

护方式下为32位二进制数字,32位偏移量 

Netware是一个多用户多任务的全32位操 

作系统,在该环境下,通过32位寻址和扩展 

寄存器,用户能够存取全部内存空间,因此, 

式下为2 

寻址方式:实方式下段寄存器左移4位 

72 交通与计算机 第l5卷 

后与偏移量相加,得到物理地址 在保护方式 是因为反汇编是一个十分复杂的工作,它不 

下,段寄存器被称之为选择符,用于在全局描 仅涉及到许多方面,而且田程序的执行是动 

述符表(GDT)或局部描述符表(LDT)中选 态的、全局的,反汇编软件一般采用静态或局 

择相应描述符,由描述符的基地址与偏移量 部反汇编,故在此,我们仅给出各个调试工具 

相加.再得到物理地址,因此,较实方式下要 在区分率上的相对比较,另外代码和效据的 

复杂很多,系统在保护方式下,在存储管理和 区分率还依赎于支持的指令系统集和工作方 

多任务方面具有极大优势,而工作在实方式 式等因素,倒如,一个采用80386指令集,实 

下的80386就像是一个具有扩晨指令集和寄 

方式下的程序段中有这样的机器码:66H, 

存器的高速8088/8086,逸完全是出于兼容 

33,OCOH。支持80386指令集的其反汇编软 

性考虑。 

件将反汇编成:xOR EAX,EAX.如果仅支 

代码和数据的区分率是衡量一个反汇编 持80286.则反汇编为:DB66H和xOR A 

软件好坏的重要因素,区分率越高,反汇编的 

AX,这样本来应为指令的结果.变成了数据 

效果将越好,而要定量地给出区分率是不容 和指令的混合体,降低了代码和数据的区分 

易的.我们知道,反汇编过程是不可逆的,即 

率。 

任何语言编写的过程可以经过翻译生成可执 

FSD Dis *Doc、DXDEBUG、 

行的机器代码,但从机器代码经过反汇编就 

SOURCER和386DEBuG的准确度见表1 

不一定能得到相应的源程序或汇编程序,这 

表l 

应该指出的是,以上所有软件均不可能 

DXDEBUG的U16和U32}SR的80386 

支持实方式到保护方式的转换,而系统 

Rea[和Protected等 

SERVER.EXE又是先在实方式下运行,建 相比较而言,对调试sAERVE.EXE来 

立用手保护方式下的表和寄存器后.再转至 说.386DEBUG具有一定优势.但它有一个 

保护方式,因此,对SERVER.EXE的反汇 

致命弱点,就是不能改变堆栈寄存器ESP的 

编和分析是一项艰巨的任务。实践中,我们采 值,这也是SERVER.EXE的优点,因为它 

用了针对不同段、不同工作方式选择不同操 

保护了网络操作系统的安垒。 

作的反汇编方法.掰如Dis*Doe的处理器选 

择80386/387 16bit和386/387 32bit.