我在尋找能夠在一種編程語言從輸入程序創建的Win32程序的編譯器的源代碼(這並不重要,也許是越簡單越好)實例編譯器
然而,我可以我找不到任何適合自己的東西,像GCC這樣的大型編譯器讓我非常困惑,因爲它們有很多功能,我不知道從哪裏開始。
- 是否有一個開源的Win32微編譯器,用於某些編程語言,我可以看一看嗎?
我在尋找能夠在一種編程語言從輸入程序創建的Win32程序的編譯器的源代碼(這並不重要,也許是越簡單越好)實例編譯器
然而,我可以我找不到任何適合自己的東西,像GCC這樣的大型編譯器讓我非常困惑,因爲它們有很多功能,我不知道從哪裏開始。
http://en.wikipedia.org/wiki/List_of_compilers選擇那些與許可證類型「開源」
我會建議拿起編譯器的教科書。他們解釋了編譯器的所有必需組件,並且通常從頭到尾開發一個編譯器。
我從我的編譯器課程擁有Modern Compiler Implementation in Java的副本,我對此很滿意。
如果您的目標是瞭解編譯器如何工作和/或如何編碼,那麼您應該閱讀關於此主題的書籍。但是,在查找源代碼示例時,請嘗試Pascal編譯器樣本,如this one。
帕斯卡有一個有點簡單的語法,並在許多書中實現。
最簡單的編程語言是Assembly,x86-assembly。最着名的彙編程序NASM是開源的;你可以看看它的源:
NASM具有宏的這確實是「編譯」成彙編語句。雖然它不是一門完全成熟的語言,但它專注於基礎知識。
我會建議尋找一個Pascal,C或SmallC MS-DOS(16位)的編譯器源代碼。特別是如果他們將自己限制爲16位平實模式(< = 64KB內存模式),它們應該相當簡單。
對分段實模式的支持增加了很大的複雜度,這是最好避免的,而且對於32位平面保護模式程序(非OS 32位編程)來說是不相關的。
對於非x86處理器,Jack Crenshaw系列文章「Let's Build a Compiler」的示例程序是針對Motorola MC68000 16/32位處理器的類似Pascal的語法編譯器。還有Marcel Hendrix在win32 version of the series上寫的Forth。
還有TCC - 支持PE-i386輸出(即Win32)的Tiny C編譯器。
雖然如果你無法閱讀Firas Assaad在評論中給出的整個SO鏈接,其中包含除這些鏈接之外的所有鏈接,我相信你會發現編譯器的源代碼非常長。
你想了解如何建立一個編譯器,或者你想了解一個Win32可執行文件在內部看起來像什麼嗎?
如果前者然後閱讀關於如何創建編譯器的書將比嘗試對源代碼進行反向工程更高效。編譯器與您見過的任何內容都不一樣,讓作者引導您瞭解所使用的原則和常用技術和工具,這確實很有幫助。還值得指出的是,編譯器是分階段構建的,只有在實施結束時才需要具備您所針對的CPU和操作系統的任何知識。如果你是編譯器構建的新手,那麼在你進入這個階段之前你有很多東西需要了解。
但是,如果您想了解Win32可執行文件的格式,那麼您需要了解x86(或x64)彙編代碼和可移植執行(PE)文件格式(Windows使用該文件執行可執行文件)。對於x86彙編代碼的介紹,我推薦Paul Carter博士出色的「PC彙編語言」免費電子書http://www.drpaulcarter.com/pcasm/,對於PE我會從這裏開始http://msdn.microsoft.com/en-us/magazine/cc301805.aspx和http://msdn.microsoft.com/en-us/magazine/cc301808.aspx
看看這個問題:http://stackoverflow.com/ questions/1669/learn-to-write-a-compiler – 2010-04-12 17:27:14
這是一本書的清單。 – saf 2010-04-12 17:36:26
其實我正在爲我的Win32平臺的語言開發一個編譯器。我建議您閱讀PE頭文件,並獲取用於實現操作碼的x86 Intel參考手冊的副本。然後,您應該創建一些「抽象」執行層,並使用此模型來創建處理器狀態的預測以生成有效的程序集。 – Pindatjuh 2010-04-12 17:55:48