laocaiye 发表于 2025-2-26 09:44:43

关于实验8分析一个奇怪的程序

我昨天刚学完跳转程序,开始对“奇怪的程序”也是很有兴趣,但是无论怎么看小鱼老师的解答都看不明白。
后来自己琢磨,感觉收货蛮大。因为小鱼老师没有讲指令长度(占字节数)这个知识点,所以又恶补了这个
知识点,配合这个,重新整理了指令帮助理解。这里一定要注意一点,即IP当前值:应为当前要执行的指令
的下一条相邻指令的地址。下面给出我整理的指令注释,前一个数字代表当前指令地址,后一个数字代表当前指令
占用的字节数。然后根据跳转指令,结合IP差值变化和指令位移计算方法,很容易理解这个奇怪的程序。

assume cs:codesg

codesg segment                       

    mov ax,4c00h          ;偏移地址:0,占2字节 。
                               ;以下注释第一个数字为当前指令偏移地址,
                                                  ;第二个数字为当前指令所占字节数

    int 21h                   ;3,2

start: mov ax,0         ;5,3

    s: nop                  ;8,1 在执行s0处之后,本地址指令为 jmp short s1

       nop                  ;9,1 之后与8共用存储指令 jmp short s1

       mov di,offset s    ;0Ah,3

       mov si,offset s2   ;0Dh,3

       mov ax,cs:   ;10h,3

       mov cs:,ax   ;13h,3

   s0: jmp short s      ;16h,2

   s1: mov ax,0                ;18h,3

       int 21h               ;1Bh,2

       mov ax,0         ;1Dh,3

   s2: jmp short s1   ;20h,2

       nop                   ;22h,1

codesg ends

end start

FishC 发表于 2025-2-26 09:44:59

您好!看起来您对程序分析已经有了很深入的理解,并且还详细整理了指令和注释。为了帮助其他同学更好地理解,我将您的分析内容使用Discuz!论坛支持的BBCode格式进行了排版:

关于实验8分析一个奇怪的程序

昨天刚学完跳转程序,对“奇怪的程序”也很有兴趣,不过一直没有完全理解。经过自己琢磨,收获颇多。由于小鱼老师没有讲解指令长度(占字节数),所以我特意补充了这方面的知识,并重新整理了指令注释,这样更容易理解这个“奇怪的程序”。需要特别注意的点是:IP当前值应为当前要执行指令的下一条相邻指令的地址。

下面是我整理的指令注释。前一个数字代表当前指令地址,后一个数字代表当前指令占用的字节数。结合跳转指令,分析IP差值变化和指令位移计算方法,很容易理解这个程序:


assume cs:codesg

codesg segment                       

    mov ax,4c00h          ;偏移地址:0,占2字节。
                             ;以下注释第一个数字为当前指令偏移地址,
                                               ;第二个数字为当前指令所占字节数

    int 21h               ;3,2

start: mov ax,0         ;5,3

    s: nop                ;8,1 在执行s0处之后,本地址指令为 jmp short s1

       nop                ;9,1 之后与8共用存储指令 jmp short s1

       mov di,offset s    ;0Ah,3

       mov si,offset s2   ;0Dh,3

       mov ax,cs:         ;10h,3

       mov cs:,ax         ;13h,3

   s0: jmp short s      ;16h,2

   s1: mov ax,0                ;18h,3

       int 21h            ;1Bh,2
                           
       mov ax,0         ;1Dh,3

   s2: jmp short s1       ;20h,2

       nop                ;22h,1

codesg ends

end start


希望这些注释和整理能帮助其他同学更直观地理解这个程序。如果有任何问题或更好的想法,欢迎讨论和交流!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 关于实验8分析一个奇怪的程序