readelf的elf 二進位制檔案格式分析工具小記

2021-09-24 11:36:19 字數 2410 閱讀 6152

readeklf工具和 objdump 命令提供的功能類似,但是它顯示的資訊更為具體,並且它不依賴 bfd 庫( bfd 庫是乙個 gnu 專案,它的目標就是希望通過一種統一的介面來處理不同的目標檔案);

elf 檔案型別 elf(executable and linking format)是一種物件檔案的格式,用於定義不同型別的物件檔案(object files)中都放了什麼東西、以及都以什麼樣的格式去放這些東西。它自最早在 system v 系統上出現後,被 xnix 世界所廣泛接受,作為預設的二進位制檔案格式來使用。可以說,elf 是構成眾多 xnix 系統的基礎之一。

elf是一種用於二進位制檔案、可執行檔案、目標**、共享庫和核心轉儲格式檔案。elf檔案由4部分組成,分別是elf頭(elf header)、程式頭表(program header table)、節(section)和節頭表(section header table)

elf檔案的結構簡述:

節表頭(section header table),也成段表,elf檔案中所有段的資訊,比如段名、段長度、段在檔案中的偏移、段的讀寫許可權和其他屬性

其他的輔助結構,比如字串表、符號表等

引數說明

-a

--all 顯示全部資訊,等價於 -h -l -s-s -r -d -v -a -i.

-h

--file-header 顯示elf檔案開始的檔案頭資訊.

-l

--program-headers --segments 顯示程式頭(段頭)資訊(如果有的話)。

-s

--section-headers --sections 顯示節頭資訊(如果有的話)。

-g

--section-groups 顯示節組資訊(如果有的話)。

-t

--section-details 顯示節的詳細資訊(-s 的)。

-s

--syms --symbols 顯示符號表段中的項(如果有的話)。

-e

--headers 顯示全部頭資訊,等價於: -h -l -s

-n

--notes 顯示note段(核心注釋)的資訊。

-r

--relocs 顯示可重定位段的資訊。

-u

--unwind 顯示unwind段資訊。當前只支援 ia64elf 的 unwind 段資訊。

-d

--dynamic 顯示動態段的資訊。

-v

--version-info 顯示版本段的資訊。

-a

--arch-specific 顯示cpu構架資訊。

-d

--use-dynamic 使用動態段中的符號表顯示符號,而不是使用符號段。

-x

--hex-dump=以16進製制方式顯示指定段內內容。number 指定段表中段的索引,或字串指定檔案中的段名。

-w[liaprmffsor]

--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=ranges] 顯示除錯段中指定的內容。

-i

--histogram 顯示符號的時候,顯示 bucketlist 長度的柱狀圖。

-v

--version 顯示 readelf 的版本資訊。

-h

--help 顯示 readelf 所支援的命令列選項。

-w

--wide 寬行輸出。

@file

可以將選項集中到乙個檔案中,然後使用這個 @file 選項載入。

這篇部落格寫的比較詳細。

ELF二進位制目標檔案詳解

以下內容為 找出所有引用的外部模組並鏈結起來,這些外部模組或函式庫一般來自於開發者,作業系統和c執行庫。鏈結程式取出這些函式庫,修訂指標位置 重定位 並交叉引用模組中的符號解析,最終產生乙個可執行模組。符號可以是全域性的也可以是區域性的。全域性符號可以在模組內部定義,或由另一模組外部引用。靜態庫是在...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

判斷二進位製半整數(二進位制)

10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...