我試圖計算出正確的操作碼的跳,我在其他線程看着這個和我還是不明白:計算JMP的操作碼
我認爲公式爲desination - (from+5)
但其只是不工作,它的方式了,這裏就是我想跳到/從地址:
FROM: 6259326B
TO: 02980000
CORRECT OPCODE: E9 90CD3EA0
FORMULA OPCODE: E9 5FC13266
所以我有這個問題,任何幫助表示讚賞。
我試圖計算出正確的操作碼的跳,我在其他線程看着這個和我還是不明白:計算JMP的操作碼
我認爲公式爲desination - (from+5)
但其只是不工作,它的方式了,這裏就是我想跳到/從地址:
FROM: 6259326B
TO: 02980000
CORRECT OPCODE: E9 90CD3EA0
FORMULA OPCODE: E9 5FC13266
所以我有這個問題,任何幫助表示讚賞。
你正在計算負面jmp!所以,正確的公式是:
0 - (從 - desination) - 5
0 - ($ 6259326B - $○二九八○○○○) - 5
什麼等於$ A03ECD90(或$ 90小尾數的CD3EA0)。
的公式是罰款(雖然看似提供的組裝和地址不準確匹配:02980000
- 6259326b
- 5
= c726cd90
,反向的字節順序,它幾乎你正確的組裝相匹配,編號承擔其關閉,由於圖像搬遷等。 )。你確定你正確地做了數學運算和顛倒了字節順序以匹配相對32位跳轉所需的編碼(小尾數)?
該公式是正確的,假設跳轉指令正好有5個字節,並且FROM
是該跳轉指令的地址。如果長度不是5或FROM
不是jmp所在的位置,則不正確。
與您在模得到2 算術:
2980000H-(6259326BH + 5)= 0A03ECD90H。
如果你不知道如何2980000H - 62593270H等於0A03ECD90H在32位,想象你是從102980000H而不是2980000H減去了一下,那就是,你有33位設置。那麼你有102980000H - 62593270H = 0A03ECD90H。你可以驗證102980000H = 62593270H + 0A03ECD90H。但是因爲你只有32位計算,所以第33位,不管它是什麼,都不會影響總和和差異。所以你只需將這兩個數字相減爲32位數字,並取最不重要的32位結果,忽略32位以外的任何未完成借入。
而且0A03ECD90H在從最低顯著字節到最顯著字節JMP指令進行編碼,讓您獲得編碼的指令字節序列:
E9,90,CD,3E, A0。
A similar question已被詢問過。
感謝您的回答,我現在使用的代碼是'to-5-from',它給出了與您相同的輸出。我是否正確地說我的新代碼適用於所有5個字節的跳轉? – Drahcir
@Richard Livingston:是的,它應該適用於所有5個字節的操作碼跳轉。 –