以上有个题目:为什么同样的汇编指令JMP 12345678却对应不合的机械码呢?
起首,机械码E9注解这是一个近跳转(Near Jmp)
这里须要补充下相干常识:
JMP分3种:
①短跳转(Short Jmp,只能跳转到256字节的局限内),对应机械码:EB
②近跳转(Near Jmp,可跳至同一段局限内的地址),对应机械码:E9
③远跳转(Far Jmp,可跳至随便率性地址),对应机械码: EA
短跳转和近跳转指令中包含的操纵数都是相对于(E)IP的偏移。
远跳转指令中包含的是目标的绝对地址。
所以短/近跳转会呈现跳至同一目标的指令机械码不合,不仅会不合,并且应当不合。
而远跳转中包含的是绝对地址,是以转移到同一地址的指令机械码雷同 。
至此,我们知道了跳转指令所对应的机械码按照E(IP)策画出来的,那到底是怎么策画的呢?
比如:
上图的第一条指令:01007568 - E9 0BE13311 JMP 12345678
此时的EIP=01007568
12345678- 01007568 = 1133E110 这里只是指向当前指令的EIP处,实际策画跳转地址要去掉当前指令的长度,当前的跳转指令须要5个字节, 1133E110 -5= 1133E10B
重视倒置次序,高位在后
原创文章,转载请注明出处:http://www.cnblogs.com/hongfei/
无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》