讀筆 匯編語言-基于Linux環(huán)境(第5章-匯編的權利:匯編語言的創(chuàng)建過程)

文章也同時在個人博客 http://kimihe.com/更新

引言

本章介紹匯編語言程序的創(chuàng)建過程急鳄,我們要準備踏上創(chuàng)作匯編程序之路啦~
仍舊如之前所說的,越了解底層堰酿,就越能夠駕馭計算機疾宏。

摘要

  • 所有的匯編過程都是處理文件的過程。
  • 程序就是一個由非常小的步驟組成的漫長旅途触创,這些步驟是一個代表機器指令的二進制值的列表坎藐。

二進制文件 vs. 文本文件

  • 機器上文件可以分為:文本文件(text file)和二進制文件(binary file)。
  • 二進制文件可以使用Linux命令:> xxd file來查看,你需要直到打印出來的內容各字段的含義岩馍。如下輸出:
$ xxd aa
00000000:   610a 620a 630a 640a 650a 660a 670a 680a   a.b.c.d.e.f.g.h.
00000010:   300a 310a 320a 330a 340a 350a 360a 370a   0.1.2.3.4.5.6.7.
00000020:   380a 390a

可以看到輸出有三列碉咆,最左側的00000000等數(shù)字代表偏移量抖单,它包含顯示那一行的第一個字節(jié)與文件開頭的第一個字節(jié)的偏移量藤树。中間的以字節(jié)為單位顯示16進制內容。最右側顯示可視化文本字符运翼,對于不可顯字符的二進制值采用句號字符表示双谆。

  • 注意到其中夾雜的0AH块攒,這里它代表換行,對應鍵盤的enter(return)佃乘。值得一提的是在windows中囱井,這個按鍵會產生回車(0DH)+換行(0AH),而Linux中只有換行(0AH)∪け埽現(xiàn)在大多數(shù)計算機系統(tǒng)和軟件忽略回車庞呕,這是當年機械打字機的歷史遺留:當打字機一行打滿后,你必須把游標移到行首(回車0DH)程帕,并切到下一行(換行0AH)住练,這樣才能開始新一行的輸入。
  • 在一個二進制可執(zhí)行文件中愁拭,位模式可能意味著完全不同的內容讲逛,這取決于它剛好位于文件中的位置,以及該文件中岭埠,它附近存在這哪些其他位模式盏混。

字節(jié)序

  • 對于字節(jié)順序的解釋可以分為小端法(little endian)大端法(big endian)。一旦使用不止一個字節(jié)來代表一個數(shù)字值惜论,字節(jié)的順序就變得至關重要许赃。
  • 將多字節(jié)值的最低有效字節(jié)存儲到最低偏移位置的計算機體系結構稱為小端系統(tǒng)(little endian)。反之馆类,將多字節(jié)值的最高有效字節(jié)存儲到最低偏移位置的計算機體系結構稱為大端系統(tǒng)(big endian)混聊。
  • 在大端系統(tǒng)中的數(shù)據(jù)以16進制顯示很容易,因為它們按照人們期待的順序出現(xiàn)乾巧,最重要(高位)的數(shù)在左邊句喜。而在小端系統(tǒng)中,一切都是顛倒的沟于。
  • 字節(jié)排列順序的差異不僅適用于存儲在文件中的字節(jié)咳胃,而且也適用于存儲在內存中的字節(jié)。而最近的硬件體系結構都被設計為雙向字節(jié)社裆。

編譯器

  • 匯編語言具有非常重要的特征拙绊,正是這一點向图,使它在眾多的編譯器中與眾不同泳秀,即:完全控制目標代碼标沪。
  • CPU有很多機器指令,其中每一條都有一個對應的匯編語言助記符嗜傅。
  • 助記符和它的操作數(shù)整合在一起稱為指令(instruction)金句。

目標代碼和連接器

  • 現(xiàn)代匯編編譯器產生的目標代碼文件是一種源代碼和可執(zhí)行文件之間的中間步驟,這個中間步驟是一種叫作目標模塊(object module)的二進制文件吕嘀。
  • 目標代碼文件本身并不能作為程序運行违寞,還需要一個額外的必要步驟,那就是連接(link)偶房。
  • 目標代碼文件作為中間步驟的原因是:大的源代碼文件可以劃分成許多更小的源代碼文件趁曼,以保持文件大小和復雜性 的可管理性。
  • 連接器不只是把目標代碼塊組合成一個單個的塊棕洋,它確保模塊以外的函數(shù)調用能夠到達目標對象模塊挡闰,并且確保所有此類內存引用實際上指向它們期望引用的地方。

重定位能力

  • 與現(xiàn)代8086一同引入的Intel體系結構內部有了很大的改進掰盘,從而使程序無須被編譯為在特定的物理地址運行摄悯。可知行文件內部的所有引用都通過相對于該程序起始位置的偏移量來指定。
  • 偏移量總是相同的愧捕,并且因為所有的引用都是相對于可知行程序文件的起始位置奢驯,所以在運行時,程序放在物理內存中的什么地方都沒有關系次绘。
  • 上述特性叫作可重定位能力瘪阁。

感想

似乎是時候可以去親手挑選硬件,并組裝一臺機器了說邮偎。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末罗洗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子钢猛,更是在濱河造成了極大的恐慌伙菜,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件命迈,死亡現(xiàn)場離奇詭異贩绕,居然都是意外死亡,警方通過查閱死者的電腦和手機壶愤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門淑倾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人征椒,你說我怎么就攤上這事娇哆。” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵碍讨,是天一觀的道長治力。 經常有香客問我,道長勃黍,這世上最難降的妖魔是什么宵统? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮覆获,結果婚禮上马澈,老公的妹妹穿的比我還像新娘。我一直安慰自己弄息,他們只是感情好痊班,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摹量,像睡著了一般辩块。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荆永,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天废亭,我揣著相機與錄音,去河邊找鬼具钥。 笑死豆村,一個胖子當著我的面吹牛,可吹牛的內容都是我干的骂删。 我是一名探鬼主播掌动,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宁玫!你這毒婦竟也來了粗恢?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤欧瘪,失蹤者是張志新(化名)和其女友劉穎眷射,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佛掖,經...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡妖碉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了芥被。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欧宜。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拴魄,靈堂內的尸體忽然破棺而出冗茸,到底是詐尸還是另有隱情席镀,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布夏漱,位于F島的核電站豪诲,受9級特大地震影響,放射性物質發(fā)生泄漏麻蹋。R本人自食惡果不足惜跛溉,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一焊切、第九天 我趴在偏房一處隱蔽的房頂上張望扮授。 院中可真熱鬧,春花似錦专肪、人聲如沸刹勃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荔仁。三九已至,卻和暖如春芽死,著一層夾襖步出監(jiān)牢的瞬間乏梁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工关贵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遇骑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓揖曾,卻偏偏與公主長得像落萎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子炭剪,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內容