问题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 不明白这都是怎么计算的。
回答: 管它怎么算的。。。根据地址和指令长度算的。。。这个下载调试器中才能得到答案。。也就是得知道指令长度。。。反正不管这个。。这种补码神马的都他妈蛋疼。。。
只是个人意见,如果不对的地方,还请大神指正:书上说:8位位移=标号地址-jmp后第一字节的地址;那在执行标号s:jmp short s1时,也就是A+E = 10+14=24=18H;再根据ip的位移量一步一步算出ip,至于jmp short s1的 偏移量,我个人认为应该还有后面EBF6那两个字节吧!呵呵!如果哪儿说的不对的话,还请大神指教!
页:
[1]