版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PARTA-3ExaminingComputerMemory如何在内存中编辑和执行汇编程序ExecutingInstructionsandPARTA-3ExaminingComputerMem1一、UsingTheDEBUGProgram
1.StartingDEBUG⑴.Someexamples①C>DEBUGCCCC.EXE↙-②C>DEBUGB:\CCCC·EXE↙-③C>DEBUG↙-NCCCC·EXE↙-L↙-⑵.TheInitialValueAfterStartingDEBUGDEBUG程序起动后,把各寄存器和标志位置成以下状态:一、UsingTheDEBUGProgram2
①SegmentRegister(CS、DS、ES和SS)=自由存贮空间的底部,即DEBUG程序结束以后的第一个段。②IP=0100H。③SP=段尾或装载程序临时区底部(两者中取较低的一个)④AX、BX、CX、DX、BP、SI、DI=0若调入DEBUG时指定了文件名,则BX(高位)+CX=文件长度的字节数。⑤标志位置都为清除状态。
3
2.AnAssemblylanguageExample
DisplayingaCharacter"3"onScreen:
①KeyinginProgramInstructionsandData:C:\>DEBUG↙(进入DEBUG)-A100↙(进入汇编状态)XXXX:0100MOVDL,33↙(数字3的ASCII码)XXXX:0102MOVAH,2↙XXXX:0104INT21↙(调用2号功能在屏上显示DL中字符)XXXX:0106INT20↙(正常结束中断)XXXX:0108↙(回车,结束汇编状态)-G↙(运行当前汇编程序)
3
(Display)Programterminatednormally
4
②UnAssemble
-U100,108↙XXXX:0100B233MOVDL,33XXXX:0102B402MOVAH,2XXXX:0104CD21INT21XXXX:0106CD20INT20XXXX:0108
③SavingaProgramfromwithinDEBUG
-RBX↙BX0000:↙-RCX↙CX0000:8↙(程序大小)-NW3.COM↙(命名)-W↙(存盘)
④ExitDEBUG
-Q↙C>_
5二、DEBUGCommands
RulesofDEBUGCommands:
①所有命令均为一单字母,其后跟一个或多个参数。②命令和参数可大写、小写或大、小写混合方式输入。③命令与参数间可用空格或逗号隔开。④修改软件时注意,DEBUG不能改写·EXE类型的文件。所以,如果需要改写,就必须事先将EXE文件的后缀改名,待修改后再恢复原来名字。⑤命令参数中都以16进制数表示。
⑥参数中字符的引号可用双引号,也可用单引号。
如何在内存中编辑和执行汇编程序6
1.Assemble
Function:Assemblesymbolicinstructionsintomachinecode.Format:A[Address]Theparameter“Address”:
用字母表示的段寄存器标志加上偏移值,例如“ACS:100”
一个段地址,加上一个偏移值,例如“A4AB:100”。
仅有一个偏移值,例如“A100”。
7
ForExample:
在屏上显示“梅花”
C>DEBUG↙-A↙08FE∶0100MOVAH,02↙08FE∶0102MOVDL,05↙08FE∶0104INT21↙(调用2号功能显示DL中字符)08FE∶0106INT20↙08FE∶0108↙-RCX↙CX0000:8↙-NA.COM↙-W↙-Q↙
Execution:
C>A.COM↙如何在内存中编辑和执行汇编程序8
2.Unassemble
Function:Unassemblemachinecodeintosymboliccode.Format:U[地址]——Unassemblebeginsatspecificaddress.U〈范围〉——Unassemblewithinspecificarea.ForExample1:
C>DEBUGKEY·EXE↙-U↙(隐含从当前指针开始)0C1C∶000050PUSHAX↙...-U0000L13↙(从0000开始13个单元)-U0000DF3↙(从0000~DF3)
如何在内存中编辑和执行汇编程序9
ForExample2:
C>DEBUGWS.COM>11.TXT↙(反汇编存盘)-U100FFFF↙......-Q↙(红框内的字符不可见)
C>_如何在内存中编辑和执行汇编程序103.Dump
Function:Displaythecontentsofareaofmemory.
Format:—D[地址]-D〈范围〉
ForExample:
-D0000L1F↙(显示从0000开始的1F字节内容)-D40:13↙(显示基本内存大小)-DFFFF:5↙(CheckingROMBIOSDate)FFFF:0000CD19E000F030362F-31362F393800FCBD.06/16/98...
如何在内存中编辑和执行汇编程序114.EnterFunction:
Enterdataintomemory,beginningataspecificlocation.
Format:
E〈地址〉〈内容表〉E〈地址〉ForExample1:
-EDS:100F2,“XYZ”,8D↙(代替指定地址开始单元内容)
ForExample2:-EDS∶100↙09BC∶010000.3000.3100.3200.↙(回车结束)
如何在内存中编辑和执行汇编程序12Note:ForExample2格式有三种操作方式:①按空格键————上一个替换完成,并显示下一个单元的内容。如要修改,则键入新的字节,如不修改,则只按空格键。②输入一个减号(“-”)————显示前一单元的内容,可进行修改。连续使用“-”号、可不断地反方向修改。③按回车键——结束E命令。
如何在内存中编辑和执行汇编程序135.Register
Function:
Displayandmodificationthecontentsofoneormoreregisters.
Format:
R命令有三种功能格式:①-R——显示所有寄存器及标志位内容。②-R〈寄存器名〉——显示和修改一个指定的寄存器的内容。ForExample:
-RAX↙AXF1F4:3B↙此时,可选择以下操作之一:a.若不改变其内容,则直接按回车键。b.若要改变内容,可用1~4个16进制值代替原值,再回车。如何在内存中编辑和执行汇编程序14③-RF——显示和修改标志位态。
ForExample:-RF↙
NVUPEIPLNZNAPONC-此时,可采用以下两种操作之一:a.若不需要修改,直接按回车键。b.若有一个或多个标志要修改,则可输入此标志的相反值。输入标志的次序是无关的,输入各标志之间可以没有空格,输入完毕,按回车键。即-PONZDINV
↙
PWS中的标志符号表示
置1:置0:状态:
-RF↙NVUPEIPLZRNAPENC-
OF
溢出
DF
方向
IF中断
SF符号
ZF零
AF辅助
PF奇偶
CF进位OVNV有/无
DPUP减/增
EIDI开/关NGPL负/正ZRNZ零/非ACNA有/无PEPO奇/偶CYNC有/无OFDFIFSFZFAFPFC156.Go
Function:RuntheexecutableprogramInmemory.
Format:G[=〈始地址〉][〈断点〉…]C>DEBUGB:KGY.EXE↙-G=023↙(在地址CS:0023中断)7.Trace
Function:Tracetheexecutionofoneinstruction.
Format:T[=地址]——执行CS:IP或指定地址处的指令。T[=地址][n]——执行指定地址后n条指令。
ForExample:-T03↙(执行CS:IP后3条指令)-T=CS:0F3B↙(执行地址CS:0F3B处指令)
6.Go16
8.Search
Function:Searchaaddressofspecifycontent.
Format:S〈地址范围〉〈内容表〉ForExample1:
-S1001206↙(在DS∶100~120的范围内查找06H地址)08FF∶0101(查得08FF∶0101内存单元的内容为06H)ForExample2:-SCS∶00010041“XYZ”↙
〖28-17〗
179.Compare
Function:Comparethecontentbetweentwomemoryarea.
Format:-C〈源地址范围〉〈目的地址〉
DisplayFormat:〈源地址〉〈源内容〉〈目标内容〉〈目标地址〉
ForExample1:
-CCS∶100L20200↙08FF∶0105000608FF∶0205
Note:以CS∶100为内存首地址的32个(20H)字节与以CS∶200为首地址的32个字节进行比较。其中的CS∶105内容“00”与CS∶205内容“06”不同。〖28-18〗如何在内存中编辑和执行汇编程序18
10.Fill
Function:Fillthecontenttospecifymemoryunit.
Format:F〈地址范围〉〈内容表〉
ForExample:
-F04BA∶100L5F3“XYZ”8D↙
(用指定的5个字节填入04BA:100开始的5个内存单元)
Note:若内容表中的字节数少于地址范围,则内容表被重复使用,直到指定范围被填满为止;若内容表的字节数大于地址范围,则多余的内容被忽略。〖28-19〗
1911.Move
Function:Movethecontentfromspecifymemoryareatoanother.
Format:M〈源地址范围〉〈目的地址〉ForExample1:-MCS∶100110500↙
(将CS∶100~110共17个字节内容搬到DS∶500开始的内存区)
ForExample2:-MCS∶100110CS∶105↙-MCS∶100110CS∶0F5↙
目的地址与源地址可以重迭,但重迭部分原来内容被覆盖。例,在程序中插入一段指令:如何在内存中编辑和执行汇编程序20
12.Hexarithmetic
Function:计算两个16进制数的和与差。
Format:H〈值〉〈值〉
ForExample:
-H0F8↙00170007(表示0FH+8H=0017H,0FH-08H=0007H)
13.Name
Function:Nameaprogram.
Format:N〈文件标识符〉[〈文件标识符〉……]
ForExample:A>DEBUG↙-Nb:myprog↙-L↙〖28-21〗
2114.Load
Function:Loadaprogramtomemory.
Format:L〈起址〉〈驱动器号〉〈扇区号〉〈扇区数〉L[地址](装入文件到指定地址,省地址则为CS:0100)ForExample1:-LCS:1200053↙(“0”为A盘)ForExample2:-NB:XEARCH.EXE↙;设置文件标识符-L↙;读入文件
……-RBX↙;检查文件长度BX0000:↙-RCX↙CX014A;原文件长度为014AH字节
:012E↙;修改文件长度为012EH字节-W↙;写盘命令(Write)〖28-22〗如何在内存中编辑和执行汇编程序2215.Write
Function:Writeaprogramontodisk.
Format:W〈起址〉〈驱动器号〉〈扇区号〉〈扇区数〉
——把数据写到指定的区段W[地址]——把指定的内存中数据写入文件中-NB:PROG↙;设置文件标识符
-L
↙……-RBX↙;修改BX、CX的内容BX0000:0↙;文件长度的高位字节数-RCX↙CX001F;文件长度的低位字节数:22↙-W↙;写入磁盘。〖28-23〗如何在内存中编辑和执行汇编程序23Note:Wextenstion,becauseWdoesnotsupportthe.exeformat.tomodifya.exeprogram,youmaychangetheextensiontemporarily.Note:Writeprogramfilesonly24
16.Input
Function:Getdatafromaport(某端口).
Format:I〈端口地址〉
ForExample:-I2F8↙6B(表示从端口02F8取得的数据为6BH)
17.OutputFunction:Outputdatatoaspecialport(指定端口).
Format:O〈端口地址〉〈字节〉
ForExample:-O2F84F↙(把字节值4FH送到端口2F8去)〖28-25〗
25
18.ProceedFunction:executeasetofrelatedinstructions.(Executesasubroutinecall(call),loop(LOOP),interrupt(INT),orrepeatstringinstruction(REP)throughtothenextinstruction)
ForExample:Editingandexecutingaprogram.
编辑并执行一个程序:
-A100↙xxxx:0100MOVDL,1↙(“1”为笑脸的AscII码)xxxx:0102MOVAH,2↙xxxx:0104INT21↙xxxx:0106INT20↙xxxx:0108↙-T-T-P(用“P”命令执行INT21h)
〖28-26〗如何在内存中编辑和执行汇编程序26
19.QuitFunction:QuittheDEBUGsession
ForExample:Editingandexecutingaprogram.
编辑并执行一个程序:
-A100↙xxxx:0100MOVDL,1↙(“1”为笑脸的AscII码)xxxx:0102MOVAH,2↙xxxx:0104INT21↙xxxx:0106INT20↙xxxx:0108↙-G=100↙☺Programteminatednormally-Q↙〖28-27〗如何在内存中编辑和执行汇编程序27Questions:
Page49
3-23-43-73-83-103-12(参考P.46显示字符!)Questions:28PARTA-3ExaminingComputerMemory如何在内存中编辑和执行汇编程序ExecutingInstructionsandPARTA-3ExaminingComputerMem29一、UsingTheDEBUGProgram
1.StartingDEBUG⑴.Someexamples①C>DEBUGCCCC.EXE↙-②C>DEBUGB:\CCCC·EXE↙-③C>DEBUG↙-NCCCC·EXE↙-L↙-⑵.TheInitialValueAfterStartingDEBUGDEBUG程序起动后,把各寄存器和标志位置成以下状态:一、UsingTheDEBUGProgram30
①SegmentRegister(CS、DS、ES和SS)=自由存贮空间的底部,即DEBUG程序结束以后的第一个段。②IP=0100H。③SP=段尾或装载程序临时区底部(两者中取较低的一个)④AX、BX、CX、DX、BP、SI、DI=0若调入DEBUG时指定了文件名,则BX(高位)+CX=文件长度的字节数。⑤标志位置都为清除状态。
31
2.AnAssemblylanguageExample
DisplayingaCharacter"3"onScreen:
①KeyinginProgramInstructionsandData:C:\>DEBUG↙(进入DEBUG)-A100↙(进入汇编状态)XXXX:0100MOVDL,33↙(数字3的ASCII码)XXXX:0102MOVAH,2↙XXXX:0104INT21↙(调用2号功能在屏上显示DL中字符)XXXX:0106INT20↙(正常结束中断)XXXX:0108↙(回车,结束汇编状态)-G↙(运行当前汇编程序)
3
(Display)Programterminatednormally
32
②UnAssemble
-U100,108↙XXXX:0100B233MOVDL,33XXXX:0102B402MOVAH,2XXXX:0104CD21INT21XXXX:0106CD20INT20XXXX:0108
③SavingaProgramfromwithinDEBUG
-RBX↙BX0000:↙-RCX↙CX0000:8↙(程序大小)-NW3.COM↙(命名)-W↙(存盘)
④ExitDEBUG
-Q↙C>_
33二、DEBUGCommands
RulesofDEBUGCommands:
①所有命令均为一单字母,其后跟一个或多个参数。②命令和参数可大写、小写或大、小写混合方式输入。③命令与参数间可用空格或逗号隔开。④修改软件时注意,DEBUG不能改写·EXE类型的文件。所以,如果需要改写,就必须事先将EXE文件的后缀改名,待修改后再恢复原来名字。⑤命令参数中都以16进制数表示。
⑥参数中字符的引号可用双引号,也可用单引号。
如何在内存中编辑和执行汇编程序34
1.Assemble
Function:Assemblesymbolicinstructionsintomachinecode.Format:A[Address]Theparameter“Address”:
用字母表示的段寄存器标志加上偏移值,例如“ACS:100”
一个段地址,加上一个偏移值,例如“A4AB:100”。
仅有一个偏移值,例如“A100”。
35
ForExample:
在屏上显示“梅花”
C>DEBUG↙-A↙08FE∶0100MOVAH,02↙08FE∶0102MOVDL,05↙08FE∶0104INT21↙(调用2号功能显示DL中字符)08FE∶0106INT20↙08FE∶0108↙-RCX↙CX0000:8↙-NA.COM↙-W↙-Q↙
Execution:
C>A.COM↙如何在内存中编辑和执行汇编程序36
2.Unassemble
Function:Unassemblemachinecodeintosymboliccode.Format:U[地址]——Unassemblebeginsatspecificaddress.U〈范围〉——Unassemblewithinspecificarea.ForExample1:
C>DEBUGKEY·EXE↙-U↙(隐含从当前指针开始)0C1C∶000050PUSHAX↙...-U0000L13↙(从0000开始13个单元)-U0000DF3↙(从0000~DF3)
如何在内存中编辑和执行汇编程序37
ForExample2:
C>DEBUGWS.COM>11.TXT↙(反汇编存盘)-U100FFFF↙......-Q↙(红框内的字符不可见)
C>_如何在内存中编辑和执行汇编程序383.Dump
Function:Displaythecontentsofareaofmemory.
Format:—D[地址]-D〈范围〉
ForExample:
-D0000L1F↙(显示从0000开始的1F字节内容)-D40:13↙(显示基本内存大小)-DFFFF:5↙(CheckingROMBIOSDate)FFFF:0000CD19E000F030362F-31362F393800FCBD.06/16/98...
如何在内存中编辑和执行汇编程序394.EnterFunction:
Enterdataintomemory,beginningataspecificlocation.
Format:
E〈地址〉〈内容表〉E〈地址〉ForExample1:
-EDS:100F2,“XYZ”,8D↙(代替指定地址开始单元内容)
ForExample2:-EDS∶100↙09BC∶010000.3000.3100.3200.↙(回车结束)
如何在内存中编辑和执行汇编程序40Note:ForExample2格式有三种操作方式:①按空格键————上一个替换完成,并显示下一个单元的内容。如要修改,则键入新的字节,如不修改,则只按空格键。②输入一个减号(“-”)————显示前一单元的内容,可进行修改。连续使用“-”号、可不断地反方向修改。③按回车键——结束E命令。
如何在内存中编辑和执行汇编程序415.Register
Function:
Displayandmodificationthecontentsofoneormoreregisters.
Format:
R命令有三种功能格式:①-R——显示所有寄存器及标志位内容。②-R〈寄存器名〉——显示和修改一个指定的寄存器的内容。ForExample:
-RAX↙AXF1F4:3B↙此时,可选择以下操作之一:a.若不改变其内容,则直接按回车键。b.若要改变内容,可用1~4个16进制值代替原值,再回车。如何在内存中编辑和执行汇编程序42③-RF——显示和修改标志位态。
ForExample:-RF↙
NVUPEIPLNZNAPONC-此时,可采用以下两种操作之一:a.若不需要修改,直接按回车键。b.若有一个或多个标志要修改,则可输入此标志的相反值。输入标志的次序是无关的,输入各标志之间可以没有空格,输入完毕,按回车键。即-PONZDINV
↙
PWS中的标志符号表示
置1:置0:状态:
-RF↙NVUPEIPLZRNAPENC-
OF
溢出
DF
方向
IF中断
SF符号
ZF零
AF辅助
PF奇偶
CF进位OVNV有/无
DPUP减/增
EIDI开/关NGPL负/正ZRNZ零/非ACNA有/无PEPO奇/偶CYNC有/无OFDFIFSFZFAFPFC436.Go
Function:RuntheexecutableprogramInmemory.
Format:G[=〈始地址〉][〈断点〉…]C>DEBUGB:KGY.EXE↙-G=023↙(在地址CS:0023中断)7.Trace
Function:Tracetheexecutionofoneinstruction.
Format:T[=地址]——执行CS:IP或指定地址处的指令。T[=地址][n]——执行指定地址后n条指令。
ForExample:-T03↙(执行CS:IP后3条指令)-T=CS:0F3B↙(执行地址CS:0F3B处指令)
6.Go44
8.Search
Function:Searchaaddressofspecifycontent.
Format:S〈地址范围〉〈内容表〉ForExample1:
-S1001206↙(在DS∶100~120的范围内查找06H地址)08FF∶0101(查得08FF∶0101内存单元的内容为06H)ForExample2:-SCS∶00010041“XYZ”↙
〖28-17〗
459.Compare
Function:Comparethecontentbetweentwomemoryarea.
Format:-C〈源地址范围〉〈目的地址〉
DisplayFormat:〈源地址〉〈源内容〉〈目标内容〉〈目标地址〉
ForExample1:
-CCS∶100L20200↙08FF∶0105000608FF∶0205
Note:以CS∶100为内存首地址的32个(20H)字节与以CS∶200为首地址的32个字节进行比较。其中的CS∶105内容“00”与CS∶205内容“06”不同。〖28-18〗如何在内存中编辑和执行汇编程序46
10.Fill
Function:Fillthecontenttospecifymemoryunit.
Format:F〈地址范围〉〈内容表〉
ForExample:
-F04BA∶100L5F3“XYZ”8D↙
(用指定的5个字节填入04BA:100开始的5个内存单元)
Note:若内容表中的字节数少于地址范围,则内容表被重复使用,直到指定范围被填满为止;若内容表的字节数大于地址范围,则多余的内容被忽略。〖28-19〗
4711.Move
Function:Movethecontentfromspecifymemoryareatoanother.
Format:M〈源地址范围〉〈目的地址〉ForExample1:-MCS∶100110500↙
(将CS∶100~110共17个字节内容搬到DS∶500开始的内存区)
ForExample2:-MCS∶100110CS∶105↙-MCS∶100110CS∶0F5↙
目的地址与源地址可以重迭,但重迭部分原来内容被覆盖。例,在程序中插入一段指令:如何在内存中编辑和执行汇编程序48
12.Hexarithmetic
Function:计算两个16进制数的和与差。
Format:H〈值〉〈值〉
ForExample:
-H0F8↙00170007(表示0FH+8H=0017H,0FH-08H=0007H)
13.Name
Function:Nameaprogram.
Format:N〈文件标识符〉[〈文件标识符〉……]
ForExample:A>DEBUG↙-Nb:myprog↙-L↙〖28-21〗
4914.Load
Function:Loadaprogramtomemory.
Format:L〈起址〉〈驱动器号〉〈扇区号〉〈扇区数〉L[地址](装入文件到指定地址,省地址则为CS:0100)ForExample1:-LCS:1200053↙(“0”为A盘)ForExample2:-NB:XEARCH.EXE↙;设置文件标识符-L↙;读入文件
……-RBX↙;检查文件长度BX0000:↙-RCX↙CX014A;原文件长度为014AH字节
:012E↙;修改文件长度为012EH字节-W↙;写盘命令(Write)〖28-22〗如何在内存中编辑和执行汇编程序5015.Write
Function:Writeaprogramontodisk.
Format:W〈起址〉〈驱动器号〉〈扇区号〉〈扇区数〉
——把数据写到指定的区段W[地址]——把指定的内存中数据写入文件中-NB:PROG↙;设置文件标识符
-L
↙……-RBX↙;修改BX、CX的内容BX0000:0↙;文件长度的高位字节数-RCX↙
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 燃气使用安全课件
- 《急性毒性实验》课件
- 2024年度工程合伙合作风险评估与保险购买协议3篇
- 财务情况评估报告范文
- 《深层搅拌桩施工》课件
- 冰箱厂工作述职报告范文
- 行政岗位年终总结(5篇)
- 《输血反应及处理》课件
- 英语教学教学课件
- 关于舞蹈老师的聘用合同
- 2024年新疆维吾尔自治区普通高中学业水平考试语文试题含答案
- HACCP计划年度评审报告
- 影院设备施工方案
- 中职语文教案:高尔基(节选)教案
- 2023年安徽合肥肥西县山南镇招考村级后备干部35人笔试参考题库(共500题)答案详解版
- 急性胰腺炎微创手术技术改进
- 大学课件-机电传动控制(完整)
- 跌倒、坠床试卷(含答案)
- 二年级安全教育主题班会(ppt.2)
- 2024届高考语文复习:一元二元作文审题立意+课件
- PPG公司案例分析
评论
0/150
提交评论