第三讲汇编语言的调试.docx
- 文档编号:1663283
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:12
- 大小:61.13KB
第三讲汇编语言的调试.docx
《第三讲汇编语言的调试.docx》由会员分享,可在线阅读,更多相关《第三讲汇编语言的调试.docx(12页珍藏版)》请在冰点文库上搜索。
第三讲汇编语言的调试
第三讲汇编语言的调试
1.教学目的:
熟悉DEBUG中的各种命令,并能用DEBUG命令调试和运行简单小程序。
2.教学要求:
①熟练掌握DEBUG中的各种常用命令;
②会用DEBUG命令调试和运行简单小程序;
③了解DEBUG程序的一些小技巧。
3.教学重点:
①DEBUG中的各种常用命令;
②用DEBUG命令调试和运行简单小程序。
4.掌握难点:
用DEBUG命令运行简单小程序
5.教学内容:
3.1DEBUG调试程序和基本命令
3.1Debug调试程序和常用命令集
Debug原意是杀虫子。
这里指机器调试工具。
DEBUG是为汇编语言设计的一种高效工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
虽然,现在好的软件越来越多了,但是有些情况下,我们用Debug就可既简单又快捷地解决一些复杂的问题!
如在杀毒、加解密、系统…等方面。
1、DEBUG程序的调用
在DOS的提示符下,可键入命令:
C:
\DEBUG[D:
][PATH][FILENAME[.EXT]][PARM1][PARM2]
其中,文件名是被调试文件的名字。
如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。
如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。
命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。
在DEBUG程序调入后,将出现提示符-,此时就可用DEBUG命令来调试程序。
2、Debug常用命令集
名称 解释 格式
a(Assemble) 逐行汇编 a[address]
c(Compare) 比较两内存块 crangeaddress
d(Dump) 内存16进制显示 d[address]或d[range]
e(Enter) 修改内存字节 eaddress[list]
f(fin) 预置一段内存 frangelist
g(Go) 执行程序 g[=address][address...]
h(Hexavithmetic) 制算术运算 hvaluevalue
i(Input) 从指定端口地址输入 ipataddress
l(Load) 读盘 l[address[driverseetor]
m(Move) 内存块传送 mrangeaddress
n(Name) 置文件名 nfilespec[filespec...]
o(Output) 从指定端口地址输出 oportadressbyte
q(Quit) 结束 q
r(Register) 显示和修改寄存器 r[registername]
s(Search) 查找字节串 srangelist
t(Trace) 跟踪执行 t[=address][value]
u(Unassemble) 反汇编 u[address]或range
w(Write) 存盘 w[address[driversectorsecnum]
?
联机帮助 ?
(1)显示存储单元的命令D(DUMP),格式为:
-D[address]或-D[range]
例如,按指定范围显示存储单元内容的方法为:
-d100120
18E4:
0100c70604023801c706-06020002c7060802G...8.G.....G...
18E4:
01100202bb0402e80200-CD20505156578B37..;..h..MPQVW.7
18E4:
01208B
其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。
这里没有指定段地址,D命令自动显示DS段的内容。
如果只指定首地址,则显示从首地址开始的80个字节的内容。
如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。
(2)修改存储单元内容的命令有两种。
·输入命令E(ENTER),有两种格式如下:
第一种格式可以用给定的内容表来替代指定范围的存储单元内容。
命令格式为:
-Eaddress[list]
例如,-EDS:
100F3‘XYZ’8D
其中F3,‘X’,‘Y’,‘Z’和8D各占一个字节,该命令可以用这五个字节来替代存储单元DS:
0100到0104的原先的内容。
若list均为十六进制数,则两数之间用空格隔开。
如:
-E100F456453432
第二种格式则是采用逐个单元相继修改的方法。
命令格式为:
-Eaddress
例如,-EDS:
100
则可能显示为:
18E4:
010089.-
如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键可接着显示下一个单元的内容,如下:
18E4:
010089.781B.-
这样,用户可以不断修改相继单元的内容,直到用ENTER键结束该命令为止。
·填写命令F(FILL),其格式为:
-Frangelist
例如:
-F4BA:
0100105F3‘XYZ’8D
使04BA:
0100~0104单元包含指定的五个字节的内容。
如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为止。
在DEBUG中提供了测试标志位的手段,它用符号表示标志位的值,下表说明每种标志位的符号表示:
(DEBUG不提供TF的符号)
表3-1 标志位的符号表示
标志名
标志为1
标志为0
OF溢出(是/否)
DF方向(减量/增量
IF中断(允许/关闭)
SF符号(负/正)
ZF零(是/否)
AF辅助进位(是/否)
PF奇偶(偶/奇)
CF进位(是/否)
OV
DN
EI
NG
ZR
AC
PE
CY
NV
UP
DI
PL
NZ
NA
PO
NC
(3)检查和修改寄存器内容的命令R(register),它有三种格式如下:
·显示CPU内所有寄存器内容和标志位状态,其格式为:
-R
例如,-r
AX=0000BX=0000CX=010ADX=0000SP=FFFEBP=0000SI=0000DI=0000DS=18E4ES=18E4SS=18E4CS=18E4IP=0100NVUPDIPLNZNAPONC
18E4:
0100C70604023801MOVWORDPTR[0204],0138DS:
0204=0000
·显示和修改某个寄存器内容,其格式为:
-Rregistername
例如,键入-RAX
系统将响应如下:
AXF1F4
:
即AX寄存器的当前内容为F1F4,如不修改则按ENTER键,否则,可键入欲修改的内容,如:
-Rbx
BX0369
:
059F
则把BX寄存器的内容修改为059F。
·显示和修改标志位状态,命令格式为:
-RF系统将响应如:
OVDNEINGZRACPECY-
此时,如不修改其内容可按ENTER键,否则,可键入欲修改的内容,如:
OVDNEINGZRACPECY-PONZDINV
即可,可见键入的顺序可以是任意的,有无空格分开均可。
(4)汇编命令A(Assemble),其格式为:
-A[address]
该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。
必须注意:
DEBUG把键入的数字均看成十六进制数
(5)反汇编命令U(Unassemble)有两种格式。
·从指定地址开始,反汇编32个字节,其格式为:
-U[address]
例如:
-u100
如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
·对指定范围内的存储单元进行反汇编,格式为:
-U[range]
例如:
-u10010c
18E4:
0100C70604023801MOVWORDPTR[0204],0138
18E4:
0106C70606020002MOVWORDPTR[0206],0200
18E4:
010CC70606020202MOVWORDPTR[0208],0202
(6)运行命令G,其格式为:
-G[=address1][address2[address3…]]
其中,地址1指定了运行的起始地址,如不指定则从当前的CS:
IP开始运行。
后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。
通常和A命令、U命令配合使用。
(7)跟踪命令T(Trace),有两种格式:
·逐条指令跟踪
-T[=address]
从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。
如未指定地址则从当前的CS:
IP开始执行。
·多条指令跟踪
-T[=address][value]
从指定地址起执行n条指令后停下来,n由value指定。
(8)命名命令N(Name),其格式为:
-Nfilespecs[filespecs]
命令把两个文件标识符格式化在CS:
5CH和CS:
6CH的两个文件控制块中,以便在其后用L或W命令把文件装入存盘。
filespecs的格式可以是:
[d:
][path]filename[.ext]
例如,
-Nmyprog
-L
可把文件myprog装入存储器。
(9)装入命令(Load),有两种功能。
·把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。
其格式为:
-L[address[drivesectorsector]
·装入指定文件,其格式为:
-L[address]
此命令装入已在CS:
5CH中格式化了文件控制块所指定的文件。
如未指定地址,则装入CS:
0100开始的存储区中。
(10)写命令W(Write),有两种功能。
·把数据写入磁盘的指定扇区。
其格式为:
-Waddressdrivesectorsector
·把数据写入指定的文件中。
其格式为:
-W[address]
此命令把指定的存储区中的数据写入由CS:
5CH处的文件控制块所指定的文件中。
如未指定地址则数据从CS:
0100开始。
要写入文件的字节数应先放入BX和CX中。
(11)退出DEBUG命令Q(Quit),其格式为:
-Q
它退出DEBUG,返回DOS。
本命令并无存盘功能,如需存盘应先使用W命令。
3.2用DEBUG调试运行汇编程序
1、在使用时,如何快速获得debug的使用帮助呢。
-?
2、显示BIOS的日期。
DFFFF:
0006L8<按回车>
3、一位十六进制数的运算。
-H91<按回车>(加减两个十六进制的数,9h+1h=Ah&9h-1h=8h)
结果是显示:
000A0008
4、现在,我们不但要编写一个汇编程序,而且我们还要把它存盘。
-A100<按回车>
MOVAH,02<按回车>
MOVDL,41<按回车>
INT21<按回车>
MOVDL,42<按回车>
INT21<按回车>
MOVDL,43<按回车>
INT21<按回车>
INT20 (程序结束,退出DEBUG)
<按回车>(结束汇编命令输入,回到DEBUG命令输入)
-RBX<按回车>
:
0000<按回车>
(注意,只要BX=0000,文件的大小就小于<64Kb.)
-RCX<按回车>(设置CX为Fh,这是程序的长度:
16位)
:
0010<按回车>(现在我们可以把这个16字节的程序写入硬盘了)
-N<按回车>
-W<按回车>
-Q<按回车>(退出DEBUG)
C:
\>DIR<按回车>
这里将会报告这个文件的大小是16字节(10h字节).
C:
\><按回车>
会马上在屏幕上打印出"ABC"
C:
\WINDOWS>DEBUG
-NPRINTABC.COM
-L
-U100L10
12A4:
0100B402MOVAH,02
12A4:
0102B241MOVDL,41
12A4:
0104CD21INT21
12A4:
0106B242MOVDL,42
12A4:
0108CD21INT21
12A4:
010AB243MOVDL,43
12A4:
010CCD21INT21
12A4:
010ECD20INT20
-R
AX=0000BX=0000CX=0010DX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=12A4ES=12A4SS=12A4CS=12A4IP=0100NVUPEIPLNZNAPONC
12A4:
0100B402MOVAH,02
-G
ABC
Programterminatednormally
3.3DEBUG命令的综合使用实例(略讲)
接下来,我们一起学习Debug在各方面的运用吧!
(在杀毒、加解密、系统...)
1、用DEBUG破解CMOS口令
经常由于忘记或不知口令而无法进入BIOS设置状态或无法进入系统,这时可采用下面的方法破解。
应该注意的是,COMS密码分两种,一种是Setup密码,另一种是System密码。
如果选择System,那么每次开机启动时都会提示您输入密码,如果密码不对,那么就无法使用计算机了,此密码的设置目的在于禁止外来者使用计算机;如果选择Setup,那么仅在进入CMOS设置时才提示您输入密码,此密码设置的目的在于禁止未授权用户设置BIOS。
我们可根据不同的目的进行设置,一般来讲,设置了SYSTME密码,那么安全性更高些,但同时如果忘记密码,其破解也就更复杂些,而设置了Setup密码则反之。
用DEBUG向端口70h和71h发送一个数据,可以清除口令设置,具体操作如下:
用软盘启动进入DOS下,执行Debug程序
debug(回车)
-o702e(回车)
-o7100(回车)
-o702f(回车)
-o7100(回车)
然后重新启动,就可进入CMOS进行修改了
2)debug
o7010(回车)
o7110(回车)
重新启动,电脑会提示CMOS设置出错,按DEL进入CMOSSETUP中发现所有的参数全变成了缺省值,重新设好参数后,存盘退出BIOS设置。
2、妙用DEBUG挑选显示器
如何直观地检验显示器的色彩是否纯正、黑白是否平衡和汇聚是否准确?
虽然我们可以利用一些软件的帮助,如NokiaMonitorTest1.0a。
但是在购买时,却极少人会随身携带,这时只有凭用户的慧眼目测。
其实,操作系统本身就自带了一个方便的工具,它就是DOS下的DEBUG。
开机后进入DOS模式(建议在DOS实模式下,不加载任何其它的系统和软件,不过在Windows9X的DOS窗口模式中也能通过;如果用户用的是WindowsMe或WindowsXP,可以点击任务栏的“开始”,选择“运行”,键入“DEBUG”,然后点击“确定”),键入DEBUG,回车。
出现DEBUG横线提示符,我们即可使用“F”命令,直接对显示缓存进行操作,使显示器显示我们所需要的“图形”。
具体操作命令如图表。
debug操作命令一览表
怎么样,都看到了吧,比彩电信号发生器提供的信号更纯、更全、更直观。
大家通过对自己心仪的显示器的测试,尽量发现它的“不足之处”,尽可能地吹毛求疵,这样就可以多掌握一些向商家讨价还价的“砝码”。
上面方法的作用是配合显像管的偏转线圈、色纯磁环、六级磁环等可调整部件,帮助用户调整和修复显像管的红、绿、蓝静汇聚,动汇聚,白、暗平衡,色纯等“面子”错误,让我们的彩显时刻展露“真我”色彩。
3、硬盘逻辑锁巧解
现象:
在遭到某个黑客程序的袭击后,硬盘不能启动,甚至用光盘和软盘都启动不了,一启动就死机,甚至做副盘都不行”。
用DEBUG手工修复硬盘步骤如下:
a:
\>debug
-a
-xxxx:
100movax,0201读一个扇区的内容
-xxxx:
103movbx,500设置一个缓存地址
-xxxx:
106movcx,0001设置第一个硬盘的硬盘指针
-xxxx:
109movdx,0080读零磁头
-xxxx:
10cint13硬盘中断
-xxxx:
10eint20
-xxxx:
0110退出程序返回到指示符
-g运行
-d500查看运行后500地址的内容
这时候会发现地址6be开始的内容是硬盘分区的信息,发现此硬盘的扩展分区指向自己,这就使DOS或WINDOWS启动时查找硬盘逻辑盘进去死循环,在DEBUG指示符下用E命令修改内存数据具体如下:
E6BE
xx.0xx.0xx.0...............
.............................
.......................55AA
55AA表示硬盘有效的标记,不要修改,xx0表示把以前的数据“xx”改成0
再用硬盘中断13把修改好的数据写入硬盘就可以了,具体如下:
A:
\>debug
a100表示修改100地址的汇编指令
-xxxx:
100movax,0301写硬盘一个扇区
-xxxx:
这里直接按回车
-g运行
-q退出
然后运行FDISK/MBR(重置硬盘引导扇区的引导程序),再重新启动电脑就行了。
怎么样?
用这种方法处理够简单的吧?
而且这种方法还有一个好处就是可以保住盘上的数据!
如果你不需要保数据的话,还有更加简单的处理方法。
课后总结:
①本部分为调试汇编语言的基础,必须理解和熟悉。
②本部分要求灵活应用,不要死记硬背。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 汇编语言 调试