一段复制自身的程序解决办法
一段复制自身的程序
我看到一段复制自身到20h:0的程序,但最后两条指令没有正确复制。
源代码如下:
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
可见,源程序最后两条指令是
而执行了复制之后,却变成了
请问这是为什么?
------解决方案--------------------
单步trace,注意最后2条的状况。
------解决方案--------------------
我看到一段复制自身到20h:0的程序,但最后两条指令没有正确复制。
源代码如下:
- 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
请问这是为什么?
------解决方案--------------------
单步trace,注意最后2条的状况。
------解决方案--------------------