從hello world 看編譯器原理

  • 來一句hello world
#  vim hello.c
#include<stdio.h>
int main()
{
  printf("hello world \n");
  return 0;
}
  • 編譯器翻譯過程
gcc -o hello hello.c
# gcc編譯器驅動程序讀取hello.c,
#將其翻譯成可執行的目標文件 hello
  • 流程圖
    在這裏插入圖片描述
    在這裏插入圖片描述
    解釋:
  1. 預處理階段:
    hello.c 通過 cpp 改寫爲 hello.i ,將頭文件 #include<stdio.h>
    引入程序當中。
  2. 編譯階段:
    將 hello.i 文件改寫爲彙編 hello.s
  3. 彙編階段:
    將 hello.s 翻譯成 機器語言 hello.o
    重定位目標文件是彙編器 使用編譯器輸出的彙編語言輸出的二進制目標文件, 要知道目標文件使用的是相對物理(內存)地址,重定位的目的就是變相對物理地址到絕對物理地址。
  4. 鏈接階段:
    這是一種節約內存的編程機制,有兩種方法實現,一種是靜態另一種就是動態(dll)。
    一些通用的函數(如 printf )是系統自帶的,如果某段程序需要調用則直接從系統拿即可。

總結:
編譯—》運行
就是將一個程序翻譯成不同程序表現的過程。

c 語言 -> 彙編 -> 機器語言

ps: 反彙編
機器語言 -> 彙編

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章