像c/c++這樣的高階語言寫出的程式,被翻譯的過程可分為四個階段,如下圖所示:
四個階段如下:
一、預處理階段
預處理器根據以字元#開頭的預處理命令,修改原始檔案,得到乙個以.i為副檔名的文字檔案。
二、編譯階段
編譯器將以.i為副檔名的檔案翻譯成以.s為副檔名的文字檔案,它包含了乙個組合語言程式。
三、彙編階段
彙編器將.s為副檔名的檔案翻譯成機器語言指令,並把這些指令打包成可重定位目標程式的格式,將其結果儲存在以.o為副檔名的二進位制檔案中。
四、鏈結階段
鏈結器負責將各個相關聯的目標檔案(.o檔案)合併,得到乙個可執行的二進位制檔案。
程式被其他程式翻譯成不同的格式
在hello程式生命週期的一開始時是乙個高階c程式,因為當處於這種形式時,它是能夠被人讀懂的。然而,為了在系統上執行hello.c程式,每條c語句都必須被其他程式轉化為一系列的低階機器語言指令。然後這些指令按照一種稱為可執行目標程式 executable object program 的格式打好包,...
高階語言反匯程式設計序的函式呼叫過程
高階語言反匯程式設計序的函式呼叫過程 摘要 本文說明高階語言編譯成組合語言後,高階語言中函式呼叫的匯程式設計序過程。正文 高階語言編譯成匯程式設計序以後,在高階語言中的函式呼叫的匯程式設計序過程如下 1.將函式引數入棧,第乙個引數在棧頂,最後乙個引數在棧底。2.執行call指令,呼叫該函式,進入該函...
高階語言反匯程式設計序的函式呼叫過程
摘要 本文說明高階語言編譯成組合語言後,高階語言中函式呼叫的匯程式設計序過程。正文 高階語言編譯成匯程式設計序以後,在高階語言中的函式呼叫的匯程式設計序過程如下 1.將函式引數入棧,第乙個引數在棧頂,最後乙個引數在棧底。2.執行call指令,呼叫該函式,進入該函式 空間。a.執行call指令,將ca...