《汇编语言》王爽——一个奇怪的程序之EBF6

时间:2022-08-07 01:15:52

《汇编语言》王爽——一个奇怪的程序之EBF6

参照图片和注释吧

assume cs:codesg
codesg segment
mov ax,4c00h
int 21h
start: mov ax,0 //程序入口点
s: nop //这个位置的内容稍后被替换了(当这里第二次执行时,就是那句EBF6了)
nop //这个位置的内容稍后被替换了(当这里第二次执行时,就是那句EBF6了。
//先往下走一步至1419:000A,然后jmp,往前跳10个字节,走到了1419:00
// 00)
mov di,offset s //di=0008H
mov si,offset s2 //si=0020H
mov ax,cs:[si] //s2处的指令(EBF6)拿过来了,复制给ax.
mov cs:[di],ax //ax再传给cs:[8],即s处被改动,上图中1419:0020处的EBF6被复
//制到了s处(1419:0008),EBF6是两个字节大小,正好把
//1419:0008、1419:0009都填满了
s0:jmp short s //马上调回到s处
s1:mov ax,0 //此处以下没有被执行到
int 21h
mov ax,0
s2:jmp short s1 //这里最初已经计算出了s2和s1之间的距离,
//18H - 20H = -10(十进制)= F6(十六进制补码的)
nop
codesg ends
end start