现在的位置: 首页 > 综合 > 正文

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

2013年12月02日 ⁄ 综合 ⁄ 共 543字 ⁄ 字号 评论关闭

参照图片和注释吧

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

抱歉!评论已关闭.