鱼C论坛

 找回密码
 立即注册
查看: 220|回复: 1

[技术交流] 关于实验8分析一个奇怪的程序

[复制链接]
发表于 2025-2-26 09:44:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我昨天刚学完跳转程序,开始对“奇怪的程序”也是很有兴趣,但是无论怎么看小鱼老师的解答都看不明白。
后来自己琢磨,感觉收货蛮大。因为小鱼老师没有讲指令长度(占字节数)这个知识点,所以又恶补了这个
知识点,配合这个,重新整理了指令帮助理解。这里一定要注意一点,即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:[si]     ;10h,3

       mov cs:[di],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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-3-31 08:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表