談?wù)刪elloworld 的生命周期

在我們要學(xué)習(xí)一門編程語言的時候第一個程序基本上是helloworld,但就是這個簡單的程序到底是如何運行的施禾,在此做一下記錄搁胆。


image.png

文章中的部分內(nèi)容來自《深入理解計算機系統(tǒng)》第一章
helloworld 從到創(chuàng)建,執(zhí)行斯碌,輸出簡單消息肛度,再到終止投慈,中間到底是如何運行的伪煤。簡單介紹下。

代碼

 #include<stdio.h>
int main(int argc, char const *argv[])
{
    printf ("hello  world \n");
    return 0;
}

二進制文本

  • 計算機中职烧,數(shù)據(jù)的存儲我們看到的是一串英文代碼蚀之,其實存儲的是2進制數(shù)據(jù)捷泞,helloworld 程序的代碼可以用 ASCLL碼表示。再把具體的ASCLL碼轉(zhuǎn)為為2進制失受。
16進制的hello.c
  • 如圖中的23對應(yīng)的10進制數(shù)據(jù)為35 而35對應(yīng)的為#


    image.png

程序被其他程序翻譯成不同的格式

hello程序從一個高級的c程序開始因為這樣更容易讓人讀懂拂到。但是如果要運行hello這個程序谆焊,必須要轉(zhuǎn)為編譯成更低的機器語言浦夷。

  1. 在Linux 中從源程序到目標程序是由編譯器完成的劈狐。


    image.png
  2. 可以用file 命令查看目標程序的詳細信息

image.png

可以看出這個程序的格式為elf(對應(yīng)的Windows下的編譯的為pie) 64為程序肥缔,因為處理器是向下兼容的如果要生成32位程序可以使用 (-m32)

在編譯中到底經(jīng)歷了哪些階段

image.png
  1. 預(yù)處理階段(cpp)根據(jù)以#號開頭的命令,修改原始的c程序改艇,比如helloworld 中的第一行 #include<stdio.h>命令告訴預(yù)處理器讀取系統(tǒng)頭文件stdio.h 的內(nèi)容.并把他直接插入程序文本中谒兄,得到一個c程序 ,通常是以 .i 為擴張名。stdio.h 文件在Linux中的(/usr/include目錄下)
image.png
  1. 編譯階段邻耕,匯編器(ccl)為把上面的helloworld.i 反義成hello.s他包含一個匯編語言程序兄世,用(ida查看匯編程序)
IDA查看
objdump查看
  1. 匯編階段:把源程序的helloworld.s 翻譯成機器語言指令御滩。并將結(jié)果保存在 helloworld.o文件中党远,helloworld.o 是一個2進制文件
  1. 鏈接階段: 源程序中的hellworld 調(diào)用了printf 函數(shù) 麸锉,他是每一個C 編輯器提供的標準c庫中的一個函數(shù),printf 函數(shù)存在一個名為printf.o的單獨的預(yù)編譯好的目標文中中柳爽,而這個文件必須以某種形式合并到我們helloworld.o程序中鏈接器(ld)就負責(zé)這種合并碱屁。結(jié)果生產(chǎn)一個可執(zhí)行的文件為helloworld娩脾。

ida 查看鏈接的printf 函數(shù)

image.png

運行helloworld程序:

image.png
image.png
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俩功,一起剝皮案震驚了整個濱河市碰声,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胰挑,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郑象,死亡現(xiàn)場離奇詭異茬末,居然都是意外死亡团南,警方通過查閱死者的電腦和手機炼彪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門辐马,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冗疮,你說我怎么就攤上這事檩帐。” “怎么了诅挑?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵拔妥,是天一觀的道長达箍。 經(jīng)常有香客問我缎玫,道長,這世上最難降的妖魔是什么筝家? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任肛鹏,我火速辦了婚禮,結(jié)果婚禮上在扰,老公的妹妹穿的比我還像新娘芒珠。我一直安慰自己,他們只是感情好皱卓,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布嫂易。 她就那樣靜靜地躺著掐禁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缕允。 梳的紋絲不亂的頭發(fā)上蹭越,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天响鹃,我揣著相機與錄音,去河邊找鬼寄悯。 笑死,一個胖子當著我的面吹牛堕义,可吹牛的內(nèi)容都是我干的猜旬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼倦卖,長吁一口氣:“原來是場噩夢啊……” “哼洒擦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起怕膛,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤熟嫩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后褐捻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掸茅,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年昧狮,在試婚紗的時候發(fā)現(xiàn)自己被綠了景馁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡逗鸣,死狀恐怖合住,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撒璧,我是刑警寧澤透葛,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站卿樱,受9級特大地震影響僚害,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜殿如,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一贡珊、第九天 我趴在偏房一處隱蔽的房頂上張望最爬。 院中可真熱鬧涉馁,春花似錦、人聲如沸爱致。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糠悯。三九已至帮坚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間互艾,已是汗流浹背试和。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纫普,地道東北人阅悍。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像昨稼,于是被迫代替她去往敵國和親节视。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容