汇编学习-实验八分析一个奇怪的程序
代码如下:
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
1. 首先程序从start处开始运行,四句mov指令实际将s2段的第一条指令复制到了s段的第一条
2. 接着当运行到s0时程序跳转到s处,此时s处的指令是jmp short s1,然而这并不是这条指令的实际目的,在程序编译时,jmp short s1被编译成了内存位移确定目标位置,即EBF6
3. 其中EB表示jmp,F6表示目标地址相对目前的ip的偏移,用补码表示
4. f6的十进制数位-10,往前挪十位,可以发现,SIZE(FEB6)+SIZE(MOV AX,0)+SIZE(MOV AX,4C00H)+SIZE(INT 21H)==10,因此程序直接跳转到mov ax,4ch开始执行,进入程序结束阶段
浙公网安备 33010602011771号