2013-04-23 54 views
-1

我想知道是否有一種方法可以設置編譯器將我的代碼編譯爲只包含1和0的.bin文件,不需要十六進制代碼一個.exe文件。我想讓代碼在處理器上運行,而不是操作系統。是否有任何設置將其設置爲Express版本中的設置?提前致謝。在Visual Studio 2012 Express中將C代碼編譯到.bin文件中

+5

你聽起來很迷茫;十六進制只是二進制的另一種表示。 .exe是一個包含運行它所需的所有二進制文件的文件。你對這個問題的意圖是什麼? – user1167662 2013-04-23 02:28:54

+0

構建操作系統。爲了達到最佳性能,我希望它儘可能低。 – 2013-04-23 02:36:59

+2

你想讓這個平臺運行在什麼平臺上?構建一個操作系統並不是一件簡單的事情,我也不會試着從一個典型的PC開始,像你可能想到的那樣。從與你處於同一位置的人處獲得此信息,不知道如何製作簡單的操作系統。我通過嘗試使用樹莓派作爲平臺執行相同的任務並學習了很多,本教程:http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/。 – user1167662 2013-04-23 02:41:57

回答

0

「.bin」文件沒有什麼魔力。擴展名一般只是表示一個二進制文件,但所有文件都是二進制文件。因此,您可以通過將鏈接器生成的「.exe」文件重命名爲「.bin」來創建「.bin」文件。

我認爲你不會對此感到滿意,所以我會詳細說明一下。 「.exe」文件擴展名(至少在Windows上,我假設你已經添加了一個與Visual Studio相關的標記),這意味着一個帶有特殊格式的二進制文件,簡稱爲Portable Executable。這是Windows操作系統上使用的二進制文件的標準格式,包括可執行文件和DLL。

所以一個PE文件是一個二進制(「.bin」)文件,但是一個帶有「.bin」擴展名的未知二進制文件並不是必然一個PE文件。你可以採取一些其他的二進制文件(如圖像),並將其重命名爲「.bin」擴展名。它只是包含一個沒有特定格式的二進制位序列。您將無法執行該文件,因爲它的格式不正確。它缺乏使其可執行的神奇PE頭。 C編譯系統默認輸出PE文件是有原因的:這是唯一對您有用的文件類型。

而像user1167662在他的comment中所說的,關於十六進制代碼沒有什麼不可思議的。二進制文件中的代碼可以用十六進制或二進制格式表示。無論哪種方式,都是完全一樣的信息。任何好的文本編輯器(至少爲程序員設計的)都可以使用表示(或ASCII或十進制)打開和顯示文件的內容。

我希望它儘可能低,以獲得最佳性能。

它沒有什麼「更低的水平」,你當然不會得到任何優化的性能。 PE文件已經包含直接在微處理器上運行的本機機器碼。它不像託管代碼那樣被解釋。它包含處理器機器語言中的一系列指令。 PE文件只包含一個額外的頭文件,允許它們被操作系統識別和執行。這對性能沒有影響。

構建操作系統。

現在,這有點不同了…特別是,這比編寫常規的Windows應用程序要困難得多。你有一個很多工作在你面前,因爲你不能依靠操作系統來做任何事情來幫助你。您需要了解您所針對的底層硬件 - 開發人員的指南/手冊對您的CPU非常有用。

而且你必須得到一個不同的構建環境。如果您沒有使用識別的格式創建PE文件,Visual Studio不會對您有所幫助。微軟的C++鏈接程序也不包含在內,link.exe。鏈接器不支持輸出「扁平」二進制文件(即剝去PE標頭的文件)。你將需要一個不同的鏈接器。 The GCC toolset can do this。有一個Windows端口;它被稱爲MinGW

我也推薦一本關於操作系統開發的書。在堆棧溢出問題的答案中覆蓋太多了。而對於學習目的,我強烈建議使用Intel以外的架構。

相關問題