20CN网络安全小组第一代论坛
发表新主题  发表回复

个人资料 | 社区目录 用户登录 | | 论坛搜索 | 常见问题 | 论坛主页
  下一个最老的主题   下一个最新的主题
» 20CN网络安全小组第一代论坛   » 电 脑 技 术   » 编程破解   » 学习汇编的好帮手(第五篇)

   
作者 标题: 学习汇编的好帮手(第五篇)
第007元素
未注册


图标 1  发表于         编辑/删除帖子   引用原文回复  
※ 想不想改变记忆体的内容?最简单的方法就是使用F命令。
※ F命令可在记忆体中填入(Fill)一个特定的十六进位数。
※ 语法∶『F<启始位址> <结束位址> <填入值>』
1.首先,请输入 F100 17F 00
2.然後,再输入 D100

1FED:0100 5F 5E 5D C2 02 00 01 00-00 00 0C 00 0D 00 0B 00 _^].............
1FED:0110 0F 00 10 00 0E 00 BA 36-15 B9 04 00 E9 E5 F2 50 .......6.......P
1FED:0120 B8 01 00 50 2B C0 50 E8-91 55 0B C0 79 08 B4 40 ...P+.P..U..y..@
1FED:0130 E8 A7 2D F9 EB 04 E8 10-06 F8 C3 E8 89 FB 74 01 ..-...........t.
1FED:0140 C3 B8 71 00 E9 61 2E A9-10 00 75 1A E8 78 FB BA ..q..a....u..x..
1FED:0150 00 00 C3 A1 A0 30 A3 86-30 B8 0D 00 E9 1C 2E 83 .....0..0.......
1FED:0160 3E 12 2F 3C 73 ED 57 FF-36 12 2F B8 27 00 E8 D3 >./<s.W.6./.'...
1FED:0170 0D BF 25 00 74 0D 2B FF-B8 C2 00 E8 C6 0D 75 06 ..%.t.+.......u.
-F100 17F 00
-D100
1FED:0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

3.记忆位置 100 到 17F 现在都已填入 00,这正是F命令所指定
的。

※ E命令是用来输入(Enter)一串位元组的资料到记忆体中,
 以构成程式。
※ 要将此程式插入记忆体中,只要在E命令後面跟著程式所要
 存放的位址即可。
1.首先,请输入 E100
2.然後,再输入 B2 01 B4 02 CD 21 CD 20

3.现在您已将程式放入记忆体中了,请输入 G
4.画面上将出现此程式执行的结果。

Program terminated normally


※ 由於机器码是给电脑看的,当然不适合用来写程式。
※ 我们可以使用组合语言指令直接来编写程式,A命令就是用来
 将组合语言指令『组译,Assemble』成十六进位数值的机器码。
※ 以 DEBUG 编写的程式一定要由位址 100h 开始才有效。
1.请依序输入 A100
2.请依序输入 MOV DL,1

3.请依序输入 MOV AH,2
4.请依序输入 INT 21

5.请依序输入 INT 20
6.请按 Enter 键

7.现在您已经将组合语言程式放入记忆体中了,请输入 G
8.画面上所出现的结果将与用E命令编写的程式一样。

Program terminated normally

9.请输入 D100
10.位址 100 到 107 就是程式的内容,与E编写的机器码一样。

1FED:0100 B2 01 B4 02 CD 21 CD 20-00 00 00 00 00 00 00 00 .....!. ........
1FED:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

※ 我们可以用U命令将十六进位的机器码反组译(Unassemble)
 成组合语言指令,语法∶『U<启始位址>,<终止位址>』
※ 您将发现∶每一行右边的组合语言指令就是被组译成中间相
 对的机器码,而 8088 实际上就是以机器码来执行程式。
1.请输入 U100,106

1FED:0100 B201 MOV DL,01
1FED:0102 B402 MOV AH,02
1FED:0104 CD21 INT 21
1FED:0106 CD20 INT 20

MOV DL,01
MOV AH,02
INT 21
INT 20

※ MOV A,B 将 B 的内容移(MOVe)到 A 中。
※ MOV DL,01 将数值 01h 移入 DL 暂存器
※ MOV AH,01 将数值 01h 移入 DL 暂存器

※ DOS 功能服务是存在於 ROM-BIOS 与 IO.SYS 内的输出入常式
 ,我们可以利用 INT 21 来呼叫,其过程为∶
1.中断要求先被送到 MSDOS.SYS 部份
2.依 AH 的值,转送到 IO.SYS 或 ROM-BIOS 中的适当常式。

※ INT∶呼叫由中断(Interrupt)向量所指的常式。
※ 显示器输出功能∶DOS 的 02h 号函数服务。
※ 输入∶AH=2DL=字元之对应数值
※ 执行∶INT21结果∶字元显示在萤幕上

※ INT 21∶DOS 的中断服务,由函数呼叫使用,程式可透过此
 中断来呼叫所有的 DOS 函数服务常式。
※ INT 20: DOS 的中断服务,用来终止程式作业,使程式执行後,
 将控制权交回给 DEBUG,并出现 Program terminated normally 讯息。

※ DEBUG 中可以用R命令来查看 8088 中的暂存器(Register)
 ,也可以用来改变暂存器的内容。
※ 您还记得每个暂存器所代表的意义吗?
※ 请注意 IP 暂存器,它保存了目前将执行的指令位址。
1.请输入 R

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1FED ES=1FED SS=1FED CS=1FED IP=0100 NV UP EI PL NZ NA PO NC
1FED:0100 B201 MOV DL,01
-

1.当程式由 100 开始执行,且以 INT 20 指令结束时,DEBUG 会
自动将 IP 的内容更新设定为 100。

※ 当您要将此程式做成一个独立的外部程式,以便在 DOS 的提
 示符号下随时都可以执行,则必须用N命令对该程式命名。
※ 程式档案一定要为 COM ,否则下次无法以 DEBUG 载入。
※ 语法∶N<程式名称>.COM
1.请输入 NSMILE.COM

※ 接著,您必须告诉 DEBUG 此程式有多长∶程式从 100 开始到
 106,所以实际占用 7 个位元组。
※ 我们利用 BX 暂存器 存放此值高位元组部分,而以 CX 暂存
 器存放此值的低位元组部分。
2.请输入 RBX (查看 BX 暂存器的内容)
3.因 BX 已设定为 0,请按 Enter 键

4.请输入 RCX(查看 CX 暂存器的内容)
5.请输入 7(程式的位元组个数)

※ 最後,请用W命令将该程式写入(Write)磁片中。
6.请输入 W

待续!!!!!

IP: 已记录

 
发表新主题  发表回复 关闭主题 突出主题 移动主题 删除主题 下一个最老的主题   下一个最新的主题
 - 适于打印的主题视图
转到:
联系我们 | 20CN网络安全小组

Powered by Infopop Corporation
UBB.classic™ 6.5.0
NetDemon修改版 1.5.0, 20CN网络安全小组 版权所有。