xjw666

汇编学习-实验八分析一个奇怪的程序

代码如下:

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开始执行,进入程序结束阶段

posted on 2021-10-08 18:40  xjw666  阅读(73)  评论(0编辑  收藏  举报

导航