2010-09-15 74 views
0

我一直很好奇,一個擴展EXE如何能夠像多功能一樣,如果你組裝一個彙編程序,你的處理器會得到一個機器代碼中的EXE,但是如果你編譯一個C#或其他.Net程序,除了它在適當的運行環境中運行外,您還可以獲得EXE。我不確定這是否與操作系統到操作系統不同(我想是這樣),但是當執行EXE時,如何確定如何執行它?不同的EXE如何在正確的運行時運行?

與此相關的,如果我寫我自己的編程語言,我將如何配合我的運行時環境這個機制?

回答

4

當編譯一個.NET程序的EXE,它不僅僅是一個字節碼(如Java)的斑點更多。實際上創建了本機可執行文件,它將加載.NET運行時並將.NET字節碼交給它,或者顯示友好的ish錯誤消息,指示該框架不可用。

格式甚至比更靈活,因爲每個視窗EXE實際上包括在開始時將顯示錯誤(「不能在DOS模式下運行」)時,爲DOS程序執行的DOS程序。

您可以在維基百科上閱讀的PE格式的詳細信息:http://en.wikipedia.org/wiki/Portable_Executable

+0

要將細節添加到您的好答案:錯誤消息的情況下,至少('不能在DOS下運行mode.')時,包含在可執行文件中的DOS程序被稱爲_stub_。 – stakx 2010-09-15 17:52:55