如何在内存中编辑和执行汇编程序课件_第1页
如何在内存中编辑和执行汇编程序课件_第2页
如何在内存中编辑和执行汇编程序课件_第3页
如何在内存中编辑和执行汇编程序课件_第4页
如何在内存中编辑和执行汇编程序课件_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论