汇编程序25:实验8(分析一个奇怪的程序)

 1 assume cs:code
 2 
 3 code segment
 4     mov ax,4c00h
 5     int 21h
 6     start:
 7           mov ax,0
 8         s:
 9           nop
10           nop
11           mov di,offset s
12           mov si,offset s2
13           mov ax,cs:[si]
14           mov cs:[di],ax
15        s0:
16           jmp short s
17        s1:
18           mov ax,0
19           int 21h
20           mov ax,0
21        s2:
22           jmp short s1
23           nop
24 code ends
25    
26 end start    

程序大致过程:

    首先程序进行编译,使指令段与code segment挂钩,编译结束时ip指向入口处,为0005(这里mov ax,4c00h占3字节,int 21h占2字节)

    标号s执行结束后,把标号s2处的程序段机器码EBF6(这里F6是计算前后位移获得,s1标号开始mov ax,0占3字节,int 21h占2字节,所以总占8字节,即到标号s2位移为8)

赋值给标号s开始处,占2字节,即替换了两个nop指令

    继续执行,到标号s0,然后跳到s处,执行新指令(刚刚赋值过来的,这里具体为机器码EBF6 汇编码JMP 0000)从而跳到code代码入口(此时ip为0而start处ip为5)

    继续执行,两条结束指令,从而code程序结束,源程序结束

posted on 2018-01-29 15:29  叶倾仙  阅读(234)  评论(0编辑  收藏  举报

导航