GCC編譯器原理(一)05------GCC 工具:readelf、size、strings、strip和 windres

1.3.18 readelf:elf 文件格式分析工具

這個工具和 objdump 命令提供的功能相似,可是它顯示的信息更爲具體,而且它不依賴 BFD 庫( BFD 庫是一個 GNU 項目,它的目標就是但願經過一種統一的接口來處理不一樣的目標文件);編輯器

ELF 文件類型 ELF(Executable and Linking Format)是一種對象文件的格式,用於定義不一樣類型的對象文件(Object files)中都放了什麼東西、以及都以什麼樣的格式去放這些東西。它自最先在 System V 系統上出現後,被 xNIX 世界所普遍接受,做爲缺省的二進制文件格式來使用。能夠說,ELF 是構成衆多 xNIX 系統的基礎之一。ide

  • ELF文件有三種類型:
    • 可重定位的對象文件(Relocatable file) 由彙編器彙編生成的 .o 文件
    • 可執行的對象文件(Executable file) 可執行應用程序
    • 可被共享的對象文件(Shared object file) 動態庫文件,也即 .so 文件
  • ELF文件的節:
    • text section 裏裝載了可執行代碼;
    • data section 裏面裝載了被初始化的數據;
    • bss section 裏面裝載了未被初始化的數據;
    • 以 .rec 打頭的 sections 裏面裝載了重定位條目;
    • symtab 或者 .dynsym section 裏面裝載了符號信息;
    • strtab 或者 .dynstr section 裏面裝載了字符串信息;

參數說明函數

選項工具

描述測試

-aspa

--all 顯示所有信息,等價於 -h -l -S-s -r -d -V -A -I.命令行

-hdebug

--file-header 顯示elf文件開始的文件頭信息.調試

-lorm

--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 <number or name>

--hex-dump=<number or name> 以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 選項載入。

1.3.19 size

size 工具,就是列出程序文件中各段的大小。默認狀況下,對於每一個目標文件或者一個歸檔文件中的每一個模塊只產生一行輸出。

命令使用格式:size [ option ... ] [ object ... ]

選項

描述

-A –B

選擇以 sysv | berkeley 的樣式輸出。

-o | -d | -x

選擇輸出數據的格式.

-t

選擇所有輸出

1.3.20 strings

strings 工具在對象文件或二進制文件中查找可打印的字符串。字符串是4個或更多可打印字符的任意序列,以換行符或空字符結束。 strings 工具對識別隨機對象文件頗有用。

語法:strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [ file ... ]

選項

描述

-a

--all

掃描整個文件而不是隻掃描目標文件初始化和裝載段

-f

–print-file-name

在顯示字符串前先顯示文件名

-n

–bytes=[number]

找到而且輸出全部 NUL 終止符序列

-

設置顯示的最少的字符數,默認是 4 個字符

-t

--radix={o,d,x}

輸出字符的位置,基於八進制,十進制或者十六進制

-o

相似 --radix=o

-T

--target=

指定二進制文件格式

-e

--encoding={s,S,b,l,B,L}

選擇字符大小和排列順序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit

@

讀取中選項

1.3.21 strip

strip 工具經過除去綁定程序和符號調試程序使用的信息,減小擴展公共對象文件格式(XCOFF)的對象文件的大小。

語法 strip [ -V ] [ -r [ -l ] | -x [ -l ] | -t | -H | -e | -E ] [ -X {32 |64 |32_64 }] [ -- ] File ...

strip 命令減小 XCOFF 對象文件的大小。

strip 命令從 XCOFF 對象文件中有選擇地除去行號信息、重定位信息、調試段、typchk 段、註釋段、文件頭以及全部或部分符號表。 一旦使用該命令,則很難調試文件的符號;所以,一般應該只在已經調試和測試過的生成模塊上使用 strip 命令。使用 strip 命令減小對象文件所需的存儲量開銷。

對於每一個對象模塊,strip 命令除去給出的選項所指定的信息。對於每一個歸檔文件,strip 命令從歸檔中除去全局符號表。

可使用 ar -s 命令將除去的符號表恢復到歸檔文件或庫文件中。

沒有選項的 strip 命令除去行號信息、重定位信息、符號表、調試段、typchk 段和註釋段。

選項

描述

-e

在對象文件的可選頭中設置 F_LOADONLY 標誌。若是對象文件放置在歸檔中,則該標誌告知綁定程序(ld 命令),在與此歸檔連接時應忽略該對象文件中的符號。

-E

復位(關閉)對象文件的可選頭中的 F_LOADONLY 位。(請參閱 -e 標誌。)

-H

除去對象文件頭、任何可選的頭以及全部段的頭部分。注: 不除去符號表信息。

-l

(小寫 L)從對象文件中除去行號信息。

-r

除了外部符號和靜態符號條目,將所有符號表信息除去。不除去重定位信息。同時除去調試段和 typchk 段。這個選項產生一個對象文件,該對象文件仍能夠用做輸入到連接編輯器(ld 命令)中。

-t

除去大多數符號表信息,但並不除去函數符號或行號信息。

-V

打印 strip 命令的版本號。

-x

除去符號表信息,但並不除去靜態或外部符號信息。 -x 標誌同時除去重定位信息,所以將不可能連接到該文件。

-X mode

指定應檢查 strip 的對象文件的類型。 mode 必須是下列之一:

  • 32 只處理 32 位對象文件
  • 64 只處理 64 位對象文件
  • 32_64 既處理 32 位對象文件,又處理 64 位對象文件

缺省值是處理 32 位對象文件(忽略 64 位對象文件)。也能夠用 OBJECT_MODE 環境變量來設置 mode 。例如,OBJECT_MODE=64 使 strip 處理任何 64 位對象文件,並忽略 32 位對象文件。-X 標誌重設 OBJECT_MODE 變量。

--

(雙連字符)將跟隨在該標誌後的全部參數解釋爲文件名。這就容許除去名稱是以連字符開始的文件。

1.3.22 windres

Windows 方面的命令,不涉及

相關文章
相關標籤/搜索