assume cs:codesg
codesg segment
mov ax, 4c00H
int 21H
start: mov ax, 0
s: nop
nop
mov di, offset s ;将s处的ip赋值给di
mov si, offset s2 ;将s2处的ip赋值给si
mov ax, cs:[si] ;相当于将s2处的物理地址给ax寄存器
mov cs:[di], ax ;把s处的地址变为s2处的地址,因而此时s段第一句原本的nop
;就变为s2处的jmp short s1
s0: jmp short s ;跳转至s处
s1: mov ax, 0
int 21h
mov ax, 0
s2: jmp short s1 ;这里语句上直接反映的是跳转至s1,但jmp short指令底层机制
;是通过计算偏移地址实现的,所以这一语句底层其实是偏移地址-10
;而s处至代码段起始处也是10个字节,所以程序能够正常结束
nop
codesg ends
end start
利用跳转语句本质编写的一段代码
猜你喜欢
转载自blog.csdn.net/qq_43071318/article/details/105425830
今日推荐
周排行