簡體   English   中英

計算JMP操作碼

[英]Calculate the JMP opcodes

我正在嘗試計算跳轉的正確操作碼,我在其他線程中看過這個,但我仍然不明白:

我認為公式是desination - (from+5)但它只是不起作用,它離開了,這里是我想要跳轉的地址:

FROM: 6259326B
TO:   02980000

CORRECT OPCODE: E9 90CD3EA0
FORMULA OPCODE: E9 5FC13266

所以我有這個問題,任何幫助贊賞。

你正在計算負jmp! 所以正確的公式是:

0 - (來自 - desination) - 5

0 - ($ 6259326B - $ 02980000) - 5

等於$ A03ECD90 (或小端的$ 90CD3EA0)。

公式很好(雖然似乎提供的程序集和地址不完全匹配: 02980000 - 6259326b - 5 = c726cd90 ,反轉字節順序,它幾乎匹配您正確的程序集,Id假定其關閉到期圖像重定位等)。 你確定你正確地進行了數學運算顛倒了字節順序以匹配相對32位跳轉所需的編碼(小端)嗎?

該公式是正確的,假設跳轉指令恰好有5個字節, FROM是該跳轉指令的地址。 如果長度不是5或FROM不是jmp所在的位置,則不正確。

有了這個你得到modulo 2 32算術:

2980000H-(6259326BH + 5)= 0A03ECD90H。

如果你不理解2980000H - 62593270H如何等於32位的0A03ECD90H,想象一下你從102980000H而不是2980000H減去,也就是說,你設置了第33位。 然后你有102980000H - 62593270H = 0A03ECD90H。 並且您可以驗證102980000H = 62593270H + 0A03ECD90H。 但由於你只有32位用於計算,所以33位,無論它是什么,都不會影響總和和差異。 因此,您只需將這兩個數字減去32位數字,並取結果的最低32位,忽略超出32位的任何未完成的借位。

並且0A03ECD90H必須在從最低有效字節到最高有效字節的jmp指令中進行編碼,因此您可以獲得編碼指令的這個字節序列:

E9,90,CD,3E,A0。

之前已經提出過類似的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM