程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> JMP地址公式推導

JMP地址公式推導

編輯:C++入門知識

以上有個問題:為什麼同樣的匯編指令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/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved