匯編 JMP 詳解


匯編 JMP 詳解

關鍵詞說明

RVA: 相對虛擬地址(Relative Virtual Address),在內存中相對於PE文件裝入地址的偏移位置,是一個相對地址。

JMP 的 3 種類型

  1. 短跳轉(Short Jmp,只能跳轉到256字節的范圍內),對應機器碼:EB
  2. 近跳轉(Near Jmp,可跳至同一段范圍內的地址),對應機器碼:E9
  3. 遠跳轉(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 字節的地址,所以指令(1)+地址(4) = 5

ps: 如果計算結果是負數,則數值后面應該用 FF 填充,如負一則應該用 E9 01 FF FF FF


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM