### Date:2017/10/28 23:31
參考:
readelf命令用來顯示一個或者多個elf格式的目標文件的信息,可以通過它的選項來控制顯示哪些信息。這里的elf-file(s)就表示那些被檢查的文件?梢灾С32位,64位的elf格式文件,也支持包含elf文件的文檔(這里一般指的是使用ar命令將一些elf文件打包之后生成的例如lib*.a之類的“靜態(tài)庫”文件)。
這個程序和objdump提供的功能類似,但是它顯示的信息更為具體,并且它不依賴BFD庫(BFD庫是一個GNU項目,它的目標就是希望通過一種統(tǒng)一的接口來處理不同的目標文件),所以即使BFD庫有什么bug存在的話也不會影響到readelf程序。
3種類型的ELF文件:
(1)可重定位文件:用戶和其他目標文件一起創(chuàng)建可執(zhí)行文件或者共享目標文件,例如lib*.a文件。
(2)可執(zhí)行文件:用于生成進程映像,載入內存執(zhí)行,例如編譯好的可執(zhí)行文件a.out。
(3)共享目標文件:用于和其他共享目標文件或者可重定位文件一起生成elf目標文件或者和執(zhí)行文件一起創(chuàng)建進程映像,例如lib*.so文件。
ELF文件總體組成: elf文件頭描述elf文件的總體信息。包括:系統(tǒng)相關,類型相關,加載相關,鏈接相關。
一、預編譯頭文件說明所謂頭文件預編譯,就是把一個工程(project)中使用的一些mfc標準頭文件(如windows.h、afxwin.h)預先編譯linux命令大全,以后該工程編譯時,不再編譯這部分頭...。當本makefile文件被編譯器讀取時,會先判斷/driver/scsi目錄下的文件是否已經被編譯,如果沒有被編譯,則先編譯該目錄下的文件后,再轉到該makefile文件中。內核文件配置好以后就能夠進行內核的編譯了,一般有兩種編譯的方式,我們采取傳統(tǒng)的編譯方式。
類型相關就是前面說的那個類型。
加載相關:包括程序頭表相關信息。
鏈接相關:節(jié)頭表相關信息。
-a --all 顯示全部信息,等價于 -h -l -S -s -r -d -V -A -I.
-h --file-header 顯示elf文件開始的文件頭信息.
-l --program-headers --segments 顯示程序頭(段頭)信息(如果有的話)。
-S --section-headers --sections 顯示節(jié)頭信息(如果有的話)。
-g --section-groups 顯示節(jié)組信息(如果有的話)。
-t --section-details 顯示節(jié)的詳細信息(-S的)。
-s --syms --symbols 顯示符號表段中的項(如果有的話)。
-e --headers 顯示全部頭信息,等價于: -h -l -S
-n --notes 顯示note段(內核注釋)的信息。
-r --relocs 顯示可重定位段的信息。
-u --unwind 顯示unwind段信息。當前只支持IA64 ELF的unwind段信息。
-d --dynamic 顯示動態(tài)段的信息。
-V --version-info 顯示版本段的信息。
-A --arch-specific 顯示CPU構架信息。
-D --use-dynamic 使用動態(tài)段中的符號表顯示符號,而不是使用符號段。
-x--hex-dump=以16進制方式顯示指定段內內容。number指定段表中段的索引,或字符串指定文件中的段名。
-w[liaprmfFsoR] or --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] 顯示調試段中指定的內容。
-I --histogram 顯示符號的時候,顯示bucket list長度的柱狀圖。
-v --version 顯示readelf的版本信息。
-H --help 顯示readelf所支持的命令行選項。
-W --wide 寬行輸出。 @file 可以將選項集中到一個文件中l(wèi)inux命令大全,然后使用這個@file選項載入。