鱼C论坛

 找回密码
 立即注册
查看: 2053|回复: 2

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

[复制链接]
头像被屏蔽
发表于 2014-4-2 14:27:00 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-2 14:27:01 | 显示全部楼层
本来不想回答的。。不过你居然是40岁的大叔了。。。这必须回答啊。。。给你点32个赞

问题1:s2:jmp short s1     EBF6 跳转到s1     F6(-10)
            s1:mov ax,0           B80000
                int 21h               CD21
                mov ax,0           B80000
            我数来数去都只有8个字节,这跳10个字节不对啊。
回答: 我们执行了jmp short s1之后才会跑到s1, 对吧? 此时ip指向的是jmp short s1下一句指令。。所以长度就是你输出来的8字节加上jmp short s1的2字节

问题2:jmp short s   ;此时向前跳转到s处执行。这个跳转也是依据位移跳转的,跳转的距是:s2-s1。???不明白,求解

回答: 不是s1 - s1 而是 s1 - s

问题3:当指令执行到s0:jmp short s时,该指令得到执行,编译器算出的ip位移量为8-18h=-16(补码F0),(ip)=(ip)+位移量=18h+(-16)=8,cs:8指向s;
            当指令执行到s标段jmp命令时,第1个字节中的机器码为EBF6,给出的ip位移量为-10(补码F6),(ip)=(ip)+位移量=ah+(-10)=0,cs:0指向第一条指令。

           ip位移量为8-18h=-16),(ip)=(ip)+位移量=18h+(-16)=8
           ip位移量为-10(补码F6),(ip)=(ip)+位移量=ah+(-10)=0        不明白这都是怎么计算的。

回答: 管它怎么算的。。。根据地址和指令长度算的。。。这个下载调试器中才能得到答案。。也就是得知道指令长度。。。反正不管这个。。这种补码神马的都他妈蛋疼。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-2 19:48:08 | 显示全部楼层
只是个人意见,如果不对的地方,还请大神指正:书上说:8位位移=标号地址-jmp后第一字节的地址;那在执行标号s:jmp short s1时,也就是A+E = 10+14=24=18H;再根据ip的位移量一步一步算出ip,至于jmp short s1的 偏移量,我个人认为应该还有后面EBF6那两个字节吧!呵呵!如果哪儿说的不对的话,还请大神指教!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 01:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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