2010-05-07 71 views
7

對於我的小型業餘愛好項目,我需要在運行時從C++程序發出機器代碼。我有基址0xDEADBEEF和想寫的東西是這樣的:是否有一種運行時C++彙編程序庫?

Assembler a((void*)0xDEADBEEF); 
a.Emit() << 
    Push(Reg::Eax) << 
    Push(Reg::Ebx) << 
    Jmp(0xFEFEFEFE); 

內聯彙編不是我的選擇,因爲生成的機器代碼是依賴於程序的狀態。

有沒有人知道現有的圖書館是否有這樣做?如果不是的話,從頭開始開發一個開源代碼是一個好主意嗎? (我的意思是,有人會使用這個庫,如果它存在?)

回答

3

您可以使用Nicolas Capen的softwire。由於他現在在Transgaming的一個名爲SoftAsm的類似產品上工作,所以它不再支持。它仍然有點做你想要的。

編輯2014年6月: - 看起來上面的sourceforge鏈接已被刪除,但它似乎可用LGPL許可here

+0

這個答案已經過時了。至少我在那個頁面上找不到任何下載 – 2012-06-07 16:00:40

3

這可能是一個矯枉過正的,因爲它支持很多平臺,有它自己的中間語言,優化等,但http://llvm.org/似乎是一個神嘗試。

+1

這是一個很酷的項目,但它太重量級了,並且(據我瞭解)不能很好地控制生成的指令。不管怎麼說,還是要謝謝你。 – Anton 2010-05-07 08:08:01

7

結賬Asmjit。這似乎是你正在尋找的東西。