2015-08-31 42 views
1

我知道對象代碼是編譯階段後出現在目標文件中的代碼(例如:aaa.obj)。這個文件是什麼?包含機器指令?如果是這樣,爲什麼我不能在該文件中看到0和1。 請幫我一把。編譯狀態後的對象代碼究竟是什麼?

+1

取決於您用來查看文件的內容。任何文件都將包含0和1。對象文件確實包含機器指令和鏈接器用來構造可執行文件的其他內容。 – Ayman

+0

那麼,我應該用什麼來查看文件? – prog481

+0

是一個反彙編程序。 – Ayman

回答

4

What's an object file in C?

一個目標文件是從編譯階段輸出的真實。它主要是機器碼,但有信息允許鏈接器查看其中包含的符號以及它需要的符號才能工作。 (作爲參考,「符號」是基本上全局對象的名稱, 函數等)

連接體需要的所有這些目標文件並且將它們組合以形成一個 可執行(假設是可以的,即:有不是任何重複的 或未定義的符號)。很多編譯器會爲你做(讀: 運行它們自己的鏈接),如果你不告訴他們「只是 編譯」使用命令行選項。 (-c是一種常見的「剛編譯; 沒有鏈接」選項)


如果是這樣,爲什麼我看不到任何0和1的在該文件中。

您正在將目標文件概念與可執行文件概念混淆。目標文件包含鏈接器的編譯代碼和指令(程序從一個或多個目標文件構建一個可執行文件)。鏈接器程序的輸出實際上是可執行文件,其中包含您所預計的零和一個。

+0

甚至可執行文件不顯示0和1,而不是有些不可理解scripts.Why? – prog481

+0

是的,你的計算機可以使用0和1(位),但實際上它使用那個序列。 8位是一個字節,大多數系統一次使用8個字節(一個64位系統)。由於大多數人喜歡文本,而8位將用於西文(ascii),所以大多數編輯試圖將所有內容都顯示爲ASCII文本。您將看到許多字符,因爲一個字節中的256個組合中的大多數用於字符。但除非文件是文本,否則你將看不到(幾乎)不真實的單詞。要查看細節,你需要一個特殊的程序,比如hexdump,od等等。大多數Unix系統都有它們,在windows上它很稀疏。 – Albert