2010-06-19 123 views
2

我一直在學習編譯器理論和程序集,並設法創建一個生成x86彙編代碼的編譯器。如何編譯Java或C++應用程序生成的代碼

我怎樣才能把這個彙編代碼變成一個.exe?是否有一些神奇的API或工具需要與之交互?或者比我想象的更簡單?

我不太確定.exe中有什麼,或者彙編代碼和.exe本身之間有多少抽象。

我的'編譯器'是用Java編寫的,但我想知道如何在C++中執行此操作。

請注意,如果我將生成的程序集編譯爲.exe就好了,例如使用vC++。


編輯:更確切地說,我已經知道如何使用編譯器編譯彙編代碼。我想要的是讓我的程序基本上輸出一個.exe。

回答

1

看起來你需要產生一個彙編程序進程和一個鏈接程序進程。在UNIX上,調用fork()函數(這將創建一個新進程)和exec()函數(指定彙編程序和鏈接程序可執行文件名稱作爲函數的參數)以及這些可執行文件的合適參數(這將是你生成的程序集和目標文件。這就是您在UNIX系統上需要做的所有事情。

+0

謝謝。在窗戶上怎麼樣? – Cam 2010-06-19 16:11:11

+0

對不起,我一定錯過了關於Windows的一點。它應該幾乎相同,有CreateProcess()函數,並且彙編程序和鏈接程序可執行文件作爲VS發行版的一部分進行安裝(al.exe和link.exe)我建議您參閱CreateProcess的MSDN文檔()以及。 – iksemyonov 2010-06-19 16:25:56

+0

很酷,謝謝。我其實並沒有在我的問題中提到過窗口 - 可能應該有:) – Cam 2010-06-19 16:34:02

0

通常情況下,您使用匯編程序和鏈接器來創建一個exe文件。沒有涉及的魔法。不同的部分被組裝在一起,添加了一個頭文件和其他樣板文件,以便操作系統知道引導程序代碼位於程序的位置並組織內存。

VC++編譯器在底層實現了這個功能。您可能會考慮在Linux上玩一下,因爲您可以更好地看到在Unix平臺上工作的機器。它基本上是一樣的,但在Windows上瀏覽UI很困難。

相關問題