假設我想用下面的操作碼做一個短跳轉:如何編碼在x86的相對短JMP
EBCB或JMP發佈8
「跳轉短,RIP = RIP + 8位移位符號 擴展到64位「
(其中CB是字節有符號值表示與方向EIP寄存器)
也許始終偏移將是相對偏移偏移+ 2因爲(EIP的執行時間基準方向)在這個短跳躍的基的twobyte指令,但加數occurs always
EB 30 = JMP 0x00000032(30)
EB E2 = JMP 0xffffffe4(-30)
然後EIP可以故意地是相同的方向,因爲fe + 2是或EIP。
EB FE = JMP 00000000
我覺得奇怪的是,overoffset內容時發生分叉,雖然數量是負的。但在英特爾我沒有發現(也許是因爲3000頁)。
英特爾®64和IA-32體系結構 軟件開發人員手冊:卷。圖2A 3-423
的近跳,其中跳轉範圍是從當前 EIP值不限於-128至127 。
然後我考慮三種可能性:
- 是2因爲是後在執行時間EIP的/未來值
- 的編碼值不是編碼的2S部件簽署數。
- 這似乎在手冊中,但我還沒有看到,因爲我傻
我很困惑的術語:什麼是「短跳」?我一直無法在網絡上的任何地方找到這個定義。 – 2013-02-20 19:30:40
@AndersonGreen短跳轉編碼爲* jmp rel8 *(EB XX),其中相對距離(dest-source)小於0x80。另一個叫做跳遠,它編碼爲* jmp rel32 *(E9 XXXXXXXX)。請注意,這可以使用66H前綴進行編碼,這會將操作數更改爲* rel16 *。 – JosephH 2013-02-21 06:24:28