編譯鏈結原理

2021-10-25 20:27:55 字數 1005 閱讀 2741

可用gcc編譯驅動程式進行處理:

unix > gcc -o main main.c
gcc為gcc編譯驅動程式名, -o表示後面為輸出檔名,main.c為要處理的源程式。

文字檔案:用ascii碼表示的檔案

巨集替換( 常量巨集、函式巨集 )

替換注釋

處理預編譯指令(』 # '開頭的)

文字檔案

語法、語法的解析

**優化

彙總符號(c**中哪些會生成符號:資料(全域性變數、靜態變數)、函式)

.data 初始化不為零的資料

.bss 初始化為零或未初始化資料

普通的未初始化的資料在com段中

可重定位的二進位制目標檔案

將彙編指令翻譯成二進位制

生成各個段(.txt.data…)

生成符號表

中間檔案(.o檔案)的elf格式(linux):

可執行的二進位制目標檔案

將多個可重定位目標檔案和標準庫函式合併成乙個可執行目標檔案

合併段調整段的起始位址和大小(各個檔案的)

合併符號表,符號解析,給每個符號分配(虛擬)位址

合併段:

符號重定位:

程式(可執行檔案的elf):

32位4g的虛擬位址空間:

編譯鏈結原理

從源 到可執行程式,需要經歷以下幾個過程 預處理 編譯 彙編 連線。1.預處理 預處理主要是處理以 開頭的預編譯指令,包括 include define if等 刪除注釋 新增行號以及標頭檔案展開。2.編譯 編譯的主要工作是詞法分析 語法分析 優化編譯,將源 翻譯成彙編 3.彙編 彙編是將彙編 翻譯...

編譯鏈結原理

32位計算機,每個程式都有4g的虛擬位址空間。首先虛擬位址空間分為兩大塊,乙個是使用者空間,乙個是核心空間。使用者空間佔3g的大小,並且它是每個程序所獨有的,它的開頭128m存放的是我們無法訪問的地方。1 預編譯 生成 i 檔案 操作命令 gcc e main.c o main.i 具體內容 1 巨...

編譯鏈結原理

32位計算機,每個程式都有4g的虛擬位址空間。首先虛擬位址空間分為兩大塊,乙個是使用者空間,乙個是核心空間。使用者空間佔3g的大小,並且它是每個程序所獨有的,它的開頭128m存放的是我們無法訪問的地方。text c語言的編譯後執行語句都編譯成機器 儲存在.text段 data 已初始化的全域性變數和...