policewj 发表于 2014-4-2 14:27:00

向往青莲 发表于 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      不明白这都是怎么计算的。

回答: 管它怎么算的。。。根据地址和指令长度算的。。。这个下载调试器中才能得到答案。。也就是得知道指令长度。。。反正不管这个。。这种补码神马的都他妈蛋疼。。。

青玄 发表于 2014-4-2 19:48:08

只是个人意见,如果不对的地方,还请大神指正:书上说:8位位移=标号地址-jmp后第一字节的地址;那在执行标号s:jmp short s1时,也就是A+E = 10+14=24=18H;再根据ip的位移量一步一步算出ip,至于jmp short s1的 偏移量,我个人认为应该还有后面EBF6那两个字节吧!呵呵!如果哪儿说的不对的话,还请大神指教!
页: [1]
查看完整版本: 实验8,分析一个奇怪的程序