2011-06-09 53 views
4

我正在開發一個項目,我想將一些自定義操作代碼添加到x86並在QEMU中運行它們。我已經想出瞭如何修改QEMU中的代碼生成,以便在QEMU中使用「假」操作碼進行彙編指令並對其進行操作。如何使用'假'指令創建x86二進制文件

但是,我遇到麻煩的部分是我如何真正去創建一個僞指令的二進制文件。我想過的唯一方法是添加一些db語句,然後手動編寫指令。例如:

xor EAX, EBX 
db 0xf1,0x32,0x55,0x00 
mov EBX, EAX 

(假設db有足夠的字節作爲實際指令)。這實際上是否會編譯一個二進制文件,在第二行中定義的字節被視爲指令?

有沒有一些更優雅的方法呢?由於我將修改QEMU以支持這些更改,因此我並不受指令格式的約束 - 我只需要讓OP代碼被QEMU的代碼生成器識別,其餘的我可以制定,但是我想要。

回答

8

使用db的方法是標準程序,當CPU的新模式出來的其中有沒有即時更新當前的工具,以支持更多的尋址模式和/或指令。

請注意,現在在x86指令集中找到用於定義新指令的漏洞現在頗具挑戰性。檢查Intel's latest CPU architecture documents:附錄中總是有一組表格顯示操作碼映射。這將是查找未使用的指令操作碼序列的最簡單方法。

+0

啊,不錯的提示。我正在查看QEMU中的代碼生成器,試圖找出我們未使用的內容,但我會仔細檢查這一點。 – KarateSnowMachine 2011-06-09 15:03:04

5

db很好,並且會在第一條指令之後和最後一條之前立即發出給定的字節序列。

您可能會考慮爲您的新指令創建一堆彙編宏,這些宏將採取相關參數併發出您的魔術字節碼。

相關問題