匯編 JMP使用詳解
匯編 JMP 詳解關鍵詞說明
RVA: 相對虛擬地址(Relative Virtual Address),在內存中相對于PE文件裝入地址的偏移位置,是一個相對地址。
JMP 的 3 種類型
- 短跳轉(Short Jmp,只能跳轉到256字節(jié)的范圍內),對應機器碼:EB
- 近跳轉(Near Jmp,可跳至同一段范圍內的地址),對應機器碼:E9
- 遠跳轉(Far Jmp,可跳至任意地址),對應機器碼: EA
短跳轉 和 近跳轉 指令中包含的操作數都是相對于(E)IP的偏移。
遠跳轉指令中包含的是目標的絕對地址。
所以短/近跳轉會出現跳至同一目標的指令機器碼不同,不僅會不同,而且應該不同。
而遠跳轉中包含的是絕對地址,因此轉移到同一地址的指令機器碼相同 。
至此,我們知道了跳轉指令所對應的機器碼根據E(IP)計算出來的,那到底是怎么計算的呢?
JMP 目標地址計算方式
目標地址 = 當前指令地址 + 指令長度 + RVA
舉例說明
如圖: 想要從 001392DB 處跳轉到 001392E1 這個地址,那么E9后面應該跟多少呢?
RVA = 001392E1 - 001392DB - 5
在計算機中使用上面的公式計算結果就是 RVA = 1 所以后面應該是跟 E9 01 00 00 00
其中 5 是指令長度 E9 后面需要跟 4 字節(jié)的地址,所以指令(1)+地址(4) = 5
ps: 如果計算結果是負數,則數值后面應該用 FF 填充,如負一則應該用 E9 01 FF FF FF
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
8086匯編開發(fā)環(huán)境搭建和Debug模式介紹(圖文詳解)
這篇文章主要介紹了8086匯編開發(fā)環(huán)境搭建和Debug模式介紹,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01