assume cs:codecs
codecs segment
s: nop
addr_ip dw 5
addr_cs dw 0
start: mov ax,offset e
sub ax,offset s ;确定循环次数
inc ax
mov cx,ax
mov ax,cs
mov ds,ax ; 确定源代码段
add ax,10
mov es,ax ; 确定目标段
mov addr_cs,ax
mov ax,0
mov bx,0
s1:
mov al,byte ptr ds:[bx]
mov byte ptr es:[bx],al
inc bx
loop s1
jmp dword ptr addr_ip
e: nop
codecs ends
end start
这是一个在内存进行自我复制的程序,在调试模式中查看时,最后的jmp指令总是变成int3
查看内存时jmp的二进制代码是“FF 2E 01 00"
这个代码被复制为”CC 2E 01 00“
这什么情况?
------解决思路----------------------
我这边debug查看原始代码是:
E2F8 loop s1
2E cs:
FF2E0100 jmp
复制了一遍后是:
E2F8 loop s1
CC int 3
FF2E0100 jmp
但是我重新运行,一行一行的-t发现复制后又没什么问题,上面有问题的我是用-p直接把loop执行完
我想是不是debug的中断的原因
------解决思路----------------------
是在那个 jmp 上断点的吧,debug 是通过 int3(0cch) 来实现这个功能的,所以会将其作为源数据复制过去了