jmp指令(jmp指令全称)

jmp指令


以上有个问题:为什么同样的汇编指令JMP 12345678却对应不同的机器码呢?
首先,机器码E9表明这是一个近跳转(Near Jmp)
这里需要补充下相关知识:
JMP分3种:
①短跳转(Short Jmp,只能跳转到256字节的范围内),对应机器码:EB
②近跳转(Near Jmp,可跳至同一段范围内的地址),对应机器码:E9
③远跳转(Far Jmp,可跳至任意地址),对应机器码: EA
短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移。
远跳转指令中包含的是目标的绝对地址。
所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。
jmp指令
而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同?。
至此,我们知道了跳转指令所对应的机器码根据E(IP)计算出来的,那到底是怎么计算的呢?
比如:
上图的第一条指令:01007568 ? ?- E9 0BE13311 ? JMP 12345678
此时的EIP=01007568
12345678-?01007568??=?? 1133E110?这里只是指向当前指令的EIP处,实际计算跳转地址要去掉当前指令的长度,当前的跳转指令需要5个字节,?? 1133E110??-5= ?1133E10B
注意颠倒顺序,高位在后

转载请说明出处 内容投诉内容投诉
九幽软件 » jmp指令(jmp指令全称)