当前位置: 代码迷 >> 汇编语言 >> 利用寄存器进行内存复制为啥有时数据不对
  详细解决方案

利用寄存器进行内存复制为啥有时数据不对

热度:118   发布时间:2016-05-02 04:28:39.0
利用寄存器进行内存复制为什么有时数据不对?
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) 来实现这个功能的,所以会将其作为源数据复制过去了
  相关解决方案