输入程序
assume cs:codesg
codesg segment
mov ax,4c00h
int 21h
start: mov ax,0
s: nop
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0: jmp short s
s1: mov ax,0
int 21h
mov ax,0
s2: jmp short s1
nop
codesg ends
end start
首先分析一下程序,s段的内容是将s2开头的四个字节指令复制到了s的开头,我们查看一下
可以看到s开头部分的四个字节此时是空的,而s2开头的四个字节 E8F6 对应指令 jmp 18
现在我们运行一下程序,先把s段运行完
此时,s开头部分虽然被替换成了 E8F6 ,但是我们可以看到两个E8F6却跳转到了不同的位置,事实上E8F6表示向前跳转8个字节,s的ip位置为8,向前8个字节正好是程序开头的表示程序运行结束的语句,所以该程序可以正常运行。
其他实验题答案:实验题答案合集