2012-01-01 48 views
0

好的,所以我需要掛鉤程序,但要做到這一點,我要複製指令E8 <Pointer to Byte Array that contains other code>。問題是,當我組裝Call 0x100時,我得到了E8 FD,我們知道E8是調用指令,所以FD必須是目標,那麼彙編器如何將目標從0x100帶入FD?謝謝,布拉德利 - 我的機器碼跳轉目標計算

+0

什麼是目標機器碼?沒有辦法'E8FD'意味着'調用0x100' – 2012-01-01 18:37:15

+0

我在EMU8086中打開它,是的,這意味着CALL 0x100。但是,我可能不知道我在說什麼。 – iDomo 2012-01-01 18:53:43

+0

你也在使用什麼彙編語言? – 2012-01-01 18:58:38

回答

3

有太多的跳/調用操作碼,其中一些是相對的。我會說你其實不是E8 FD,而是E8 FD FFE8似乎是「呼叫16位相對」,而0x100是默認放置指令的地方。

所以你把call 0x100放在地址0x100,生成的代碼是「做跳轉指令,從實際指令指針跳-3」。 -3是因爲在指令被讀取之後從位置計算移位,在E8 FD FF的情況下是0x103。這就是爲什麼如果FD FF轉移的話,big-endian爲0xfffd,這是16位-3

+0

我敢打賭,實際的操作碼不是'E8 FD FF',因爲那樣你會有一個無限循環。 – 2012-01-01 19:15:57

+0

是的,它可能是'E8 FD 00',在什麼情況下該指令被放在0x00地址。這在我看來有點不尋常,因爲我的記憶微弱地告訴我0x100應該是舊DOS代碼的開始,但在這種情況下可能是0x00。 '呼叫0x100'的原始地址沒有被指定,所以我只能猜測。 – 2012-01-01 19:18:54