一段复制自身的程序
时间:2011-12-15
来源:互联网
我看到一段复制自身到20h:0的程序,但最后两条指令没有正确复制。
源代码如下:
Assembly code
debug的结果如下:
-r
AX=0000 BX=0000 CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B85 ES=0B85 SS=0B95 CS=0B95 IP=0000 NV UP EI PL NZ NA PO NC
0B95:0000 8CC8 MOV AX,CS
-u
0B95:0000 8CC8 MOV AX,CS
0B95:0002 8ED8 MOV DS,AX
0B95:0004 B82000 MOV AX,0020
0B95:0007 8EC0 MOV ES,AX
0B95:0009 BB0000 MOV BX,0000
0B95:000C 8BC9 MOV CX,CX
0B95:000E 8A07 MOV AL,[BX]
0B95:0010 26 ES:
0B95:0011 8807 MOV [BX],AL
0B95:0013 43 INC BX
0B95:0014 E2F8 LOOP 000E
0B95:0016 B8004C MOV AX,4C00
0B95:0019 CD21 INT 21
0B95:001B C3 RET
0B95:001C F9 STC
0B95:001D C3 RET
-g 0b95:16
AX=0021 BX=001B CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0020 SS=0B95 CS=0B95 IP=0016 NV UP EI PL NZ NA PE NC
0B95:0016 B8004C MOV AX,4C00
-u 20:0
0020:0000 8CC8 MOV AX,CS
0020:0002 8ED8 MOV DS,AX
0020:0004 B82000 MOV AX,0020
0020:0007 8EC0 MOV ES,AX
0020:0009 BB0000 MOV BX,0000
0020:000C 8BC9 MOV CX,CX
0020:000E 8A07 MOV AL,[BX]
0020:0010 26 ES:
0020:0011 8807 MOV [BX],AL
0020:0013 43 INC BX
0020:0014 E2F8 LOOP 000E
0020:0016 CC INT 3
0020:0017 004CCD ADD [SI-33],CL
0020:001A 2100 AND [BX+SI],AX
0020:001C 0000 ADD [BX+SI],AL
可见,源程序最后两条指令是
Assembly code
而执行了复制之后,却变成了
Assembly code
请问这是为什么?
源代码如下:
Assembly code
assume cs:Test Test segment mov ax,cs mov ds,ax mov ax,20h mov es,ax mov bx,0 mov cx,cx s:mov al,ds:[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h Test ends end
debug的结果如下:
-r
AX=0000 BX=0000 CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B85 ES=0B85 SS=0B95 CS=0B95 IP=0000 NV UP EI PL NZ NA PO NC
0B95:0000 8CC8 MOV AX,CS
-u
0B95:0000 8CC8 MOV AX,CS
0B95:0002 8ED8 MOV DS,AX
0B95:0004 B82000 MOV AX,0020
0B95:0007 8EC0 MOV ES,AX
0B95:0009 BB0000 MOV BX,0000
0B95:000C 8BC9 MOV CX,CX
0B95:000E 8A07 MOV AL,[BX]
0B95:0010 26 ES:
0B95:0011 8807 MOV [BX],AL
0B95:0013 43 INC BX
0B95:0014 E2F8 LOOP 000E
0B95:0016 B8004C MOV AX,4C00
0B95:0019 CD21 INT 21
0B95:001B C3 RET
0B95:001C F9 STC
0B95:001D C3 RET
-g 0b95:16
AX=0021 BX=001B CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0020 SS=0B95 CS=0B95 IP=0016 NV UP EI PL NZ NA PE NC
0B95:0016 B8004C MOV AX,4C00
-u 20:0
0020:0000 8CC8 MOV AX,CS
0020:0002 8ED8 MOV DS,AX
0020:0004 B82000 MOV AX,0020
0020:0007 8EC0 MOV ES,AX
0020:0009 BB0000 MOV BX,0000
0020:000C 8BC9 MOV CX,CX
0020:000E 8A07 MOV AL,[BX]
0020:0010 26 ES:
0020:0011 8807 MOV [BX],AL
0020:0013 43 INC BX
0020:0014 E2F8 LOOP 000E
0020:0016 CC INT 3
0020:0017 004CCD ADD [SI-33],CL
0020:001A 2100 AND [BX+SI],AX
0020:001C 0000 ADD [BX+SI],AL
可见,源程序最后两条指令是
Assembly code
mov ax,4c00h int 21h
而执行了复制之后,却变成了
Assembly code
INT 3
请问这是为什么?
作者: fdasf 发布时间: 2011-12-15
没有int 3,你怎么返还DOS
作者: masmaster 发布时间: 2011-12-15
单步trace,注意最后2条的状况。
作者: mydo 发布时间: 2011-12-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28