深入理解計算機系統 readelf分析

2021-09-05 12:03:24 字數 1701 閱讀 1389

elf(executable and linking format)是乙個定義了目標檔案內部資訊如何組成和組織的檔案格式。核心會根據這些資訊載入可執行檔案,核心根據這些資訊可以知道從檔案**獲取**,從**獲取初始化資料,在**應該載入共享庫,等資訊。

elf檔案主要三種檔案型別,具體參考(

那麼從elf檔案上可以得到什麼資訊,在linux上有乙個gnu軟體,可以檢視目標檔案內容。我們得到乙個可執行檔案,可以採用指令 readelf -h a.out 來檢視其資訊。

有關readelf指令使用如下:

name

readelf - displays information about elf files.

synopsis

readelf [-a|--all]

[-h|--file-header]

[-l|--program-headers|--segments]

[-s|--section-headers|--sections]

[-g|--section-groups]

[-t|--section-details]

[-e|--headers]

[-s|--syms|--symbols]

[--dyn-syms]

[-n|--notes]

[-r|--relocs]

[-u|--unwind]

[-d|--dynamic]

[-v|--version-info]

[-a|--arch-specific]

[-d|--use-dynamic]

[-x |--hex-dump=]

[-p |--string-dump=]

[-r |--relocated-dump=]

[-z|--decompress]

[-c|--archive-index]

[-w[lliaprmffsort]|

--debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index]]

[--dwarf-depth=n]

[--dwarf-start=n]

[-i|--histogram]

[-v|--version]

[-w|--wide]

[-h|--help]

可執行檔案分析如下:

從上圖中頭部資訊可以得到很多資訊,根據class、machine、type可以知道這個檔案是在x86-64位機器上可執行檔案,根據entry point address 知道程式啟動是從虛擬位址0x4003e0開始執行,這個位址並不是main的位址,而是_start函式位址,_start函式是鏈結器建立的,為了初始化程式。number of program header 程式有9個段, number of section headers 程式有31個區,區中的資訊是用來將鏈結使用的,主要包括程式**、程式資料、重定向資訊等。、

檢視區的資訊可以使用:readelf -s a.out。

深入理解計算機系統

關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...

《深入理解計算機系統》

知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...

深入理解計算機系統

系統的硬體組成 快取記憶體 作業系統管理硬體 程序虛擬記憶體 檔案amdahl定律 併發和並行 0和1組成的位序列,又稱為位元序列,8個位被組織成一組,成為位元組。每個位元組表示程式中的某些文字字元。系統中的所有資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的的使用者資料以及網路上傳送的資料,都是...