第七章相關連線

2021-10-01 08:01:48 字數 1009 閱讀 9498

#include int time;

int foo(int a)

int main(int argc, char *ar**)

執行結果:

編譯之後我們通過 readelf -s 檢視可執行檔案的段資訊

-s或者--full-contents顯示目標檔案每個節區的二進位制完整內容,對應的會顯示該內容在目標檔案中的偏移位置,還有將內容轉換成ascii碼的形式

-s或者--source

混合顯示原始碼和彙編**,如果編譯目標檔案的時候指定了-g引數的話,效果會非常明顯。否則,和-d引數沒有什麼區別,事實上-s引數預設包含了-d引數。

進入正題:

重定位,可執行目標檔案

為了決定段的大小、符號定義、符號引用,並指出包含那些庫模組、將這些段放置在輸出位址空間的什麼地方,鏈結器會將所有的輸入檔案進行掃瞄。掃瞄完成後的下一步就是鏈結過程的核心,重定位。由於重定位過程的兩個步驟,判斷程式位址計算最初的非空段,和解析外部符號的引用,是依次、共同處理的,所以我們講重定位即同時涉及這兩個過程。

elf 可執行目標檔案格式

我們可以發現,可執行目標檔案類似於可重定位目標檔案的格式。 

在 elf 頭部描述檔案的總體格式,包括程式的入口點(程式執行時要執行的第一條指令的位址)。

init 段定義了乙個 _init 函式,程式的初始化**會呼叫它。

elf 可執行檔案被設計的很容易載入到儲存器,可執行檔案的連續的片被對映到連續的儲存器段。段頭部表描述了這種對映關係。

將每個引用與它輸入的可重定位目標檔案的符號表中的乙個確定的符號定義關聯起來。

不同的符號是有強弱之分的:

強符號:函式和初始化的全域性變數。存放在.data

弱符號:未初始化的全域性變數。存放在.bss

第七章 String型別相關

1 如何建立string型別物件 string str abc 最常用 string string new string 建立乙個物件 string string new string abc 建立兩個物件,乙個為abc字串物件,乙個為new string 2 字串剪下 substring 1,3 ...

python第七章 python教程(第七章)

字典和集合 字典是python中唯一,乙個對映型別 如何建立乙個字典,如下 dict dict 滲透 網路安全 怎麼理解字典呢?現實生活中的字典可以通過首字母進行查詢要查詢的漢子,python也可以這樣理解,通過 前的元素查詢到冒號後的元素。為什麼說字典是唯一乙個對映型別呢?看圖。對映型別區別與序列...

第七章 函式

1.ansi c 允許函式原型的使用,函式宣告提供給編譯器和之後的呼叫函式返回值型別,引數型別和數量的資訊,而k c用單獨的列表給出引數的型別,編譯器只記住函式的返回值型別,但不儲存函式的引數數量和型別 2.沒有return語句的函式,隱式的返回 3.函式的原型可以單獨放於乙個標頭檔案中,一定要具有...