0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

readelf命令:用于讀取ELF格式文件的詳細(xì)信息

Linux愛好者 ? 來源:Linux愛好者 ? 作者:戀貓大鯉魚 ? 2021-02-02 14:45 ? 次閱讀

1.功能簡介

readelf 用于讀取 ELF(Executable and Linkable Format)格式文件的詳細(xì)信息,包括目標(biāo)文件、可執(zhí)行文件、共享目標(biāo)文件與核心轉(zhuǎn)儲文件。

1.1 ELF 文件分類

(1)可重定位文件(Relocatable File),這類文件包含了代碼和數(shù)據(jù),用于鏈接生成可以執(zhí)行文件或共享目標(biāo)文件,目標(biāo)文件和靜態(tài)鏈接庫均屬于可重定位文件,例如*.olib*.a文件;

(2)可執(zhí)行文件(Executable File),用于生成進程映像,載入內(nèi)存執(zhí)行。Linux 環(huán)境下的 ELF 可執(zhí)行文件一般沒有擴展名,例如用戶命令 ls;

(3)共享目標(biāo)文件(Shared Object File),這種文件包含了代碼和數(shù)據(jù),用于和可重定位文件或其他共享目標(biāo)文件一起生成可執(zhí)行文件。例如 Linux 的動態(tài)共享對象(Dynamic Shared Object),C 語言運行時庫 glibc-2.5.so;

(4)核心轉(zhuǎn)儲文件(Core Dump File),當(dāng)進程意外終止時,系統(tǒng)可以將該進程的地址空間的內(nèi)容及終止時的一些其他信息轉(zhuǎn)儲到核心轉(zhuǎn)儲文件。例如 Linux 下的 core dump。

1.2 ELF 文件組成

ELF 文件頭描述了 ELF 文件的總體信息,包括系統(tǒng)相關(guān)、類型相關(guān)、加載相關(guān)和鏈接相關(guān)的信息。
(1)系統(tǒng)相關(guān),比如ELF 文件標(biāo)識的魔數(shù),以及硬件和平臺等相關(guān)信息,增加了 ELF 文件的移植性,使交叉編譯成為可能;
(2)類型相關(guān),比如 ELF 文件類型,分別有目標(biāo)文件、可執(zhí)行文件、動態(tài)鏈接庫與核心轉(zhuǎn)儲文件;
(3)加載相關(guān),比如程序頭,描述了 ELF 文件被加載時的段信息;
(4)鏈接相關(guān),比如節(jié)頭,描述了 ELF 文件的節(jié)信息。

2.命令格式

readelf

3.選項說明

運行 readelf 的時候,除了 -v 和 -H 之外,其它的選項必須有一個被指定。

-a,--all:顯示全部信息,等價于-h -l -S -s -r -d -V -A -I
-h,--file-header:顯示文件頭信息
-l,--program-headers,--segments:顯示程序頭(如果有的話)
-S,--section-headers,--sections:顯示節(jié)頭信息(如果有的話)
-g,--section-groups:顯示節(jié)組信息(如果有的話)
-t,--section-details:顯示節(jié)的詳細(xì)信息(-S的)
-s,--syms,--symbols:顯示符號表節(jié)中的項(如果有的話)
--dyn-syms:顯示動態(tài)符號表節(jié)中的項(如果有的話)
-e,--headers:顯示全部頭信息,等價于-h -l -S
-n,--notes:顯示note段(內(nèi)核注釋)的信息
-r,--relocs:顯示可重定位段的信息。
-u,--unwind:顯示unwind段信息。當(dāng)前只支持IA64 ELF的unwind段信息。
-d,--dynamic:顯示動態(tài)段的信息
-V,--version-info:顯示版本段的信息
-A ,--arch-specific:顯示CPU構(gòu)架信息
-D,--use-dynamic:使用動態(tài)符號表顯示符號,而不是符號表
-x ,--hex-dump=:以16進制方式顯示指定節(jié)內(nèi)容。number指定節(jié)表中節(jié)的索引,或字符串指定文件中的節(jié)名
-R ,--relocated-dump=:以16進制方式顯示指定節(jié)內(nèi)容。number指定節(jié)表中節(jié)的索引,或字符串指定文件中的節(jié)名。節(jié)的內(nèi)容被展示前將被重定位。
-p ,--string-dump=:以可打印的字符串顯示指定節(jié)內(nèi)容。number指定節(jié)表中節(jié)的索引,或字符串指定文件中的節(jié)名。
-c,--archive-index:展示檔案頭中的文件符號索引信息,執(zhí)行與 ar 的 t 命令相同的功能,但不使用 BFD 庫
-w[liaprmfFsoR],--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]:顯示調(diào)試段中指定的內(nèi)容
--dwarf-depth=n:將“.debug_info”節(jié)的轉(zhuǎn)儲限制為n個子級。這只對--debug dump=info有用。默認(rèn)為打印所有DIE(debugging information entry);n的特殊值0也將具有此效果
--dwarf-start=n:只打印以編號為n的模具開始的DIE,僅適用于使用--debug dump=info選項時。該選項可以與--dwarf-depth=n連用。
-I,--histogram:顯示符號的時候,顯示 bucket list 長度的柱狀圖
-v,--version:顯示 readelf 的版本信息
-H,--help:顯示 readelf 所支持的命令行選項
-W,--wide:寬行輸出
@file:可以將選項集中到一個文件中,然后使用這個@file 選項載入

4.常用示例

4.1準(zhǔn)備工作

(1)首先生成可執(zhí)行文件形式的 ELF 文件。

使用g++,分別不使用和使用-g選項,編譯生成可執(zhí)行文件main.out和main.debug.out。

g++main.cpp-omain.out
g++-gmain.cpp-omain.debug.out

ll
-rw-r--r--1rootroot74Mar2111:48main.cpp
-rwxr-xr-x1rootroot9119Mar2111:49main.out
-rwxr-xr-x1rootroot19695Mar2111:49main.debug.out

可見,因為加入了調(diào)試信息,main.debug.out 的大小明顯比 main.out 大很多。

(2)生成庫文件。

//
//@file:print.cpp
//

#include

voidprint()
{
std::cout<<"readelf"<

使用g++和ar,分別生成靜態(tài)鏈接庫libprint.a和動態(tài)鏈接庫libprint.so。

#生成靜態(tài)庫libmy.a
g++-cprint.cpp-oprint.o
arclibprint.aprint.o

#生成動態(tài)庫libprint.so
g++-shared-fPIC-olibprint.soprint.cpp

編譯之后,查看生成的文件。

ll
-rw-r--r--1rootroot2810Mar2113:50libprint.a
-rwxr-xr-x1rootroot8613Mar2113:56libprint.so
-rw-r--r--1rootroot104Mar2113:40print.cpp
-rw-r--r--1rootroot2664Mar2113:40print.o

基于以上可執(zhí)行文件和庫,下面給出一些常用的示例。

4.2 常用示例

(1)讀取可執(zhí)行文件形式的 ELF 文件頭信息。

readelf-hmain.out
ELFHeader:
Magic:7f454c46020101000000000000000000
Class:ELF64
Data:2'scomplement,littleendian
Version:1(current)
OS/ABI:UNIX-SystemV
ABIVersion:0
Type:EXEC(Executablefile)
Machine:AdvancedMicroDevicesX86-64
Version:0x1
Entrypointaddress:0x400780
Startofprogramheaders:64(bytesintofile)
Startofsectionheaders:4496(bytesintofile)
Flags:0x0
Sizeofthisheader:64(bytes)
Sizeofprogramheaders:56(bytes)
Numberofprogramheaders:9
Sizeofsectionheaders:64(bytes)
Numberofsectionheaders:30
Sectionheaderstringtableindex:27

Type:EXEC (Executable file)可以看出其類型為 EXEC(可執(zhí)行文件)。并且可以看出文件的體系結(jié)構(gòu)為 x86-64。另外,含調(diào)試信息的"main.debug.out"和不含調(diào)試信息的"main"除了一些大小信息之外,其內(nèi)容是一樣的。

(2)讀取目標(biāo)文件形式的 ELF 文件頭信息。

readelf-hprint.o
ELFHeader:
Magic:7f454c46020101000000000000000000
Class:ELF64
Data:2'scomplement,littleendian
Version:1(current)
OS/ABI:UNIX-SystemV
ABIVersion:0
Type:REL(Relocatablefile)
Machine:AdvancedMicroDevicesX86-64
Version:0x1
Entrypointaddress:0x0
Startofprogramheaders:0(bytesintofile)
Startofsectionheaders:488(bytesintofile)
Flags:0x0
Sizeofthisheader:64(bytes)
Sizeofprogramheaders:0(bytes)
Numberofprogramheaders:0
Sizeofsectionheaders:64(bytes)
Numberofsectionheaders:15
Sectionheaderstringtableindex:12

可見目標(biāo)文件的elf文件,其類型為REL(可重定位文件)。且相對于可執(zhí)行文件,目標(biāo)文件沒有程序頭(段頭)信息。

(3)讀取靜態(tài)庫文件形式的 ELF 文件頭信息。

readelf-hlibprint.a

File:libprint.a(print.o)
ELFHeader:
Magic:7f454c46020101000000000000000000
Class:ELF64
Data:2'scomplement,littleendian
Version:1(current)
OS/ABI:UNIX-SystemV
ABIVersion:0
Type:REL(Relocatablefile)
Machine:AdvancedMicroDevicesX86-64
Version:0x1
Entrypointaddress:0x0
Startofprogramheaders:0(bytesintofile)
Startofsectionheaders:488(bytesintofile)
Flags:0x0
Sizeofthisheader:64(bytes)
Sizeofprogramheaders:0(bytes)
Numberofprogramheaders:0
Sizeofsectionheaders:64(bytes)
Numberofsectionheaders:15
Sectionheaderstringtableindex:12

可見靜態(tài)庫文件的elf文件,其類型為REL(可重定位文件),且沒有程序頭(段頭)信息。

(4)讀取動態(tài)庫文件形式的 ELF 文件頭信息。

readelf-hlibprint.so
ELFHeader:
Magic:7f454c46020101000000000000000000
Class:ELF64
Data:2'scomplement,littleendian
Version:1(current)
OS/ABI:UNIX-SystemV
ABIVersion:0
Type:DYN(Sharedobjectfile)
Machine:AdvancedMicroDevicesX86-64
Version:0x1
Entrypointaddress:0x870
Startofprogramheaders:64(bytesintofile)
Startofsectionheaders:4464(bytesintofile)
Flags:0x0
Sizeofthisheader:64(bytes)
Sizeofprogramheaders:56(bytes)
Numberofprogramheaders:7
Sizeofsectionheaders:64(bytes)
Numberofsectionheaders:28
Sectionheaderstringtableindex:25

這里,可見動態(tài)庫其類型為DYN(共享目標(biāo)文件),和可執(zhí)行文件類似,同樣擁有程序頭(段頭)信息。

(5)查看可執(zhí)行的 ELF 文件程序頭信息。

readelf-lmain.out

ElffiletypeisEXEC(Executablefile)
Entrypoint0x400780
Thereare9programheaders,startingatoffset64

ProgramHeaders:
TypeOffsetVirtAddrPhysAddr
FileSizMemSizFlagsAlign
PHDR0x00000000000000400x00000000004000400x0000000000400040
0x00000000000001f80x00000000000001f8RE8
INTERP0x00000000000002380x00000000004002380x0000000000400238
0x000000000000001c0x000000000000001cR1
[Requestingprograminterpreter:/lib64/ld-linux-x86-64.so.2]
LOAD0x00000000000000000x00000000004000000x0000000000400000
0x0000000000000b040x0000000000000b04RE200000
LOAD0x0000000000000dd80x0000000000600dd80x0000000000600dd8
0x00000000000002840x00000000000003a0RW200000
DYNAMIC0x0000000000000df80x0000000000600df80x0000000000600df8
0x00000000000002000x0000000000000200RW8
NOTE0x00000000000002540x00000000004002540x0000000000400254
0x00000000000000440x0000000000000044R4
GNU_EH_FRAME0x000000000000098c0x000000000040098c0x000000000040098c
0x00000000000000440x0000000000000044R4
GNU_STACK0x00000000000000000x00000000000000000x0000000000000000
0x00000000000000000x0000000000000000RW10
GNU_RELRO0x0000000000000dd80x0000000000600dd80x0000000000600dd8
0x00000000000002280x0000000000000228R1

SectiontoSegmentmapping:
SegmentSections...
00
01.interp
02.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.text.fini.rodata.eh_frame_hdr.eh_frame
03.init_array.fini_array.jcr.dynamic.got.got.plt.data.bss
04.dynamic
05.note.ABI-tag.note.gnu.build-id
06.eh_frame_hdr
07
08.init_array.fini_array.jcr.dynamic.got

注意:含調(diào)試信息的可執(zhí)行文件"main.debug.out"和不含調(diào)試信息的"main.out"其內(nèi)容是一樣的。

(6)查看動態(tài)庫 ELF 文件程序頭信息。

readelf-llibprint.so

ElffiletypeisDYN(Sharedobjectfile)
Entrypoint0x870
Thereare7programheaders,startingatoffset64

ProgramHeaders:
TypeOffsetVirtAddrPhysAddr
FileSizMemSizFlagsAlign
LOAD0x00000000000000000x00000000000000000x0000000000000000
0x0000000000000acc0x0000000000000accRE200000
LOAD0x0000000000000da80x0000000000200da80x0000000000200da8
0x00000000000002a00x00000000000002a8RW200000
DYNAMIC0x0000000000000dd00x0000000000200dd00x0000000000200dd0
0x00000000000001f00x00000000000001f0RW8
NOTE0x00000000000001c80x00000000000001c80x00000000000001c8
0x00000000000000240x0000000000000024R4
GNU_EH_FRAME0x00000000000009f80x00000000000009f80x00000000000009f8
0x000000000000002c0x000000000000002cR4
GNU_STACK0x00000000000000000x00000000000000000x0000000000000000
0x00000000000000000x0000000000000000RW10
GNU_RELRO0x0000000000000da80x0000000000200da80x0000000000200da8
0x00000000000002580x0000000000000258R1

SectiontoSegmentmapping:
SegmentSections...
00.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.text.fini.rodata.eh_frame_hdr.eh_frame
01.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.bss
02.dynamic
03.note.gnu.build-id
04.eh_frame_hdr
05
06.init_array.fini_array.jcr.data.rel.ro.dynamic.got

(7)查看一個可執(zhí)行的 ELF 文件的節(jié)頭信息。

readelf-Smain.out
Thereare30sectionheaders,startingatoffset0x1190:

SectionHeaders:
[Nr]NameTypeAddressOffset
SizeEntSizeFlagsLinkInfoAlign
[0]NULL000000000000000000000000
00000000000000000000000000000000000
[1].interpPROGBITS000000000040023800000238
000000000000001c0000000000000000A001
[2].note.ABI-tagNOTE000000000040025400000254
00000000000000200000000000000000A004
[3].note.gnu.build-iNOTE000000000040027400000274
00000000000000240000000000000000A004
[4].gnu.hashGNU_HASH000000000040029800000298
00000000000000300000000000000000A508
[5].dynsymDYNSYM00000000004002c8000002c8
00000000000001380000000000000018A618
[6].dynstrSTRTAB000000000040040000000400
00000000000001800000000000000000A001
[7].gnu.versionVERSYM000000000040058000000580
000000000000001a0000000000000002A502
[8].gnu.version_rVERNEED00000000004005a0000005a0
00000000000000400000000000000000A628
[9].rela.dynRELA00000000004005e0000005e0
00000000000000300000000000000018A508
[10].rela.pltRELA000000000040061000000610
00000000000000c00000000000000018A5128
[11].initPROGBITS00000000004006d0000006d0
000000000000001a0000000000000000AX004
[12].pltPROGBITS00000000004006f0000006f0
00000000000000900000000000000010AX0016
[13].textPROGBITS000000000040078000000780
00000000000001e40000000000000000AX0016
[14].finiPROGBITS000000000040096400000964
00000000000000090000000000000000AX004
[15].rodataPROGBITS000000000040097000000970
000000000000001c0000000000000000A008
[16].eh_frame_hdrPROGBITS000000000040098c0000098c
00000000000000440000000000000000A004
[17].eh_framePROGBITS00000000004009d0000009d0
00000000000001340000000000000000A008
[18].init_arrayINIT_ARRAY0000000000600dd800000dd8
00000000000000100000000000000000WA008
[19].fini_arrayFINI_ARRAY0000000000600de800000de8
00000000000000080000000000000000WA008
[20].jcrPROGBITS0000000000600df000000df0
00000000000000080000000000000000WA008
[21].dynamicDYNAMIC0000000000600df800000df8
00000000000002000000000000000010WA608
[22].gotPROGBITS0000000000600ff800000ff8
00000000000000080000000000000008WA008
[23].got.pltPROGBITS000000000060100000001000
00000000000000580000000000000008WA008
[24].dataPROGBITS000000000060105800001058
00000000000000040000000000000000WA004
[25].bssNOBITS00000000006010600000105c
00000000000001180000000000000000WA0032
[26].commentPROGBITS00000000000000000000105c
000000000000002c0000000000000001MS001
[27].shstrtabSTRTAB000000000000000000001088
00000000000001080000000000000000001
[28].symtabSYMTAB000000000000000000001910
00000000000006f0000000000000001829488
[29].strtabSTRTAB000000000000000000002000
000000000000039f0000000000000000001
KeytoFlags:
W(write),A(alloc),X(execute),M(merge),S(strings),l(large)
I(info),L(linkorder),G(group),T(TLS),E(exclude),x(unknown)
O(extraOSprocessingrequired)o(OSspecific),p(processorspecific)

(8)查看一個包含調(diào)試信息的可執(zhí)行的 ELF 文件的節(jié)頭信息。

readelf-Smain.debug.out
Thereare35sectionheaders,startingatoffset0x3928:

SectionHeaders:
[Nr]NameTypeAddressOffset
SizeEntSizeFlagsLinkInfoAlign
[0]NULL000000000000000000000000
00000000000000000000000000000000000
[1].interpPROGBITS000000000040023800000238
000000000000001c0000000000000000A001
[2].note.ABI-tagNOTE000000000040025400000254
00000000000000200000000000000000A004
[3].note.gnu.build-iNOTE000000000040027400000274
00000000000000240000000000000000A004
[4].gnu.hashGNU_HASH000000000040029800000298
00000000000000300000000000000000A508
[5].dynsymDYNSYM00000000004002c8000002c8
00000000000001380000000000000018A618
[6].dynstrSTRTAB000000000040040000000400
00000000000001800000000000000000A001
[7].gnu.versionVERSYM000000000040058000000580
000000000000001a0000000000000002A502
[8].gnu.version_rVERNEED00000000004005a0000005a0
00000000000000400000000000000000A628
[9].rela.dynRELA00000000004005e0000005e0
00000000000000300000000000000018A508
[10].rela.pltRELA000000000040061000000610
00000000000000c00000000000000018A5128
[11].initPROGBITS00000000004006d0000006d0
000000000000001a0000000000000000AX004
[12].pltPROGBITS00000000004006f0000006f0
00000000000000900000000000000010AX0016
[13].textPROGBITS000000000040078000000780
00000000000001e40000000000000000AX0016
[14].finiPROGBITS000000000040096400000964
00000000000000090000000000000000AX004
[15].rodataPROGBITS000000000040097000000970
000000000000001c0000000000000000A008
[16].eh_frame_hdrPROGBITS000000000040098c0000098c
00000000000000440000000000000000A004
[17].eh_framePROGBITS00000000004009d0000009d0
00000000000001340000000000000000A008
[18].init_arrayINIT_ARRAY0000000000600dd800000dd8
00000000000000100000000000000000WA008
[19].fini_arrayFINI_ARRAY0000000000600de800000de8
00000000000000080000000000000000WA008
[20].jcrPROGBITS0000000000600df000000df0
00000000000000080000000000000000WA008
[21].dynamicDYNAMIC0000000000600df800000df8
00000000000002000000000000000010WA608
[22].gotPROGBITS0000000000600ff800000ff8
00000000000000080000000000000008WA008
[23].got.pltPROGBITS000000000060100000001000
00000000000000580000000000000008WA008
[24].dataPROGBITS000000000060105800001058
00000000000000040000000000000000WA004
[25].bssNOBITS00000000006010600000105c
00000000000001180000000000000000WA0032
[26].commentPROGBITS00000000000000000000105c
000000000000002c0000000000000001MS001
[27].debug_arangesPROGBITS000000000000000000001088
00000000000000300000000000000000001
[28].debug_infoPROGBITS0000000000000000000010b8
00000000000014f90000000000000000001
[29].debug_abbrevPROGBITS0000000000000000000025b1
000000000000039f0000000000000000001
[30].debug_linePROGBITS000000000000000000002950
00000000000002410000000000000000001
[31].debug_strPROGBITS000000000000000000002b91
0000000000000c4e0000000000000001MS001
[32].shstrtabSTRTAB0000000000000000000037df
00000000000001480000000000000000001
[33].symtabSYMTAB0000000000000000000041e8
0000000000000768000000000000001834538
[34].strtabSTRTAB000000000000000000004950
000000000000039f0000000000000000001
KeytoFlags:
W(write),A(alloc),X(execute),M(merge),S(strings),l(large)
I(info),L(linkorder),G(group),T(TLS),E(exclude),x(unknown)
O(extraOSprocessingrequired)o(OSspecific),p(processorspecific)

可見,相對非調(diào)試版本的可執(zhí)行文件,多了些".debug*"節(jié)的信息。

(9)查看一個目標(biāo)文件的 ELF 文件的節(jié)頭信息。

readelf-Sprint.o
Thereare15sectionheaders,startingatoffset0x1e8:

SectionHeaders:
[Nr]NameTypeAddressOffset
SizeEntSizeFlagsLinkInfoAlign
[0]NULL000000000000000000000000
00000000000000000000000000000000000
[1].textPROGBITS000000000000000000000040
00000000000000740000000000000000AX004
[2].rela.textRELA000000000000000000000900
000000000000010800000000000000181318
[3].dataPROGBITS0000000000000000000000b4
00000000000000000000000000000000WA004
[4].bssNOBITS0000000000000000000000b4
00000000000000010000000000000000WA004
[5].rodataPROGBITS0000000000000000000000b4
00000000000000080000000000000000A001
[6].init_arrayINIT_ARRAY0000000000000000000000c0
00000000000000080000000000000000WA008
[7].rela.init_arrayRELA000000000000000000000a08
000000000000001800000000000000181368
[8].commentPROGBITS0000000000000000000000c8
000000000000002d0000000000000001MS001
[9].note.GNU-stackPROGBITS0000000000000000000000f5
00000000000000000000000000000000001
[10].eh_framePROGBITS0000000000000000000000f8
00000000000000780000000000000000A008
[11].rela.eh_frameRELA000000000000000000000a20
0000000000000048000000000000001813108
[12].shstrtabSTRTAB000000000000000000000170
00000000000000720000000000000000001
[13].symtabSYMTAB0000000000000000000005a8
0000000000000210000000000000001814138
[14].strtabSTRTAB0000000000000000000007b8
00000000000001450000000000000000001
KeytoFlags:
W(write),A(alloc),X(execute),M(merge),S(strings),l(large)
I(info),L(linkorder),G(group),T(TLS),E(exclude),x(unknown)
O(extraOSprocessingrequired)o(OSspecific),p(processorspecific)

(10)查看一個靜態(tài)庫文件的 ELF 文件的節(jié)頭信息。

readelf-Slibprint.a

File:libprint.a(print.o)
Thereare15sectionheaders,startingatoffset0x1e8:

SectionHeaders:
[Nr]NameTypeAddressOffset
SizeEntSizeFlagsLinkInfoAlign
[0]NULL000000000000000000000000
00000000000000000000000000000000000
[1].textPROGBITS000000000000000000000040
00000000000000740000000000000000AX004
[2].rela.textRELA000000000000000000000900
000000000000010800000000000000181318
[3].dataPROGBITS0000000000000000000000b4
00000000000000000000000000000000WA004
[4].bssNOBITS0000000000000000000000b4
00000000000000010000000000000000WA004
[5].rodataPROGBITS0000000000000000000000b4
00000000000000080000000000000000A001
[6].init_arrayINIT_ARRAY0000000000000000000000c0
00000000000000080000000000000000WA008
[7].rela.init_arrayRELA000000000000000000000a08
000000000000001800000000000000181368
[8].commentPROGBITS0000000000000000000000c8
000000000000002d0000000000000001MS001
[9].note.GNU-stackPROGBITS0000000000000000000000f5
00000000000000000000000000000000001
[10].eh_framePROGBITS0000000000000000000000f8
00000000000000780000000000000000A008
[11].rela.eh_frameRELA000000000000000000000a20
0000000000000048000000000000001813108
[12].shstrtabSTRTAB000000000000000000000170
00000000000000720000000000000000001
[13].symtabSYMTAB0000000000000000000005a8
0000000000000210000000000000001814138
[14].strtabSTRTAB0000000000000000000007b8
00000000000001450000000000000000001
KeytoFlags:
W(write),A(alloc),X(execute),M(merge),S(strings),l(large)
I(info),L(linkorder),G(group),T(TLS),E(exclude),x(unknown)
O(extraOSprocessingrequired)o(OSspecific),p(processorspecific)

(11)查看一個動態(tài)庫文件的 ELF 文件的節(jié)頭信息。

readelf-Slibprint.so
Thereare28sectionheaders,startingatoffset0x1170:

SectionHeaders:
[Nr]NameTypeAddressOffset
SizeEntSizeFlagsLinkInfoAlign
[0]NULL000000000000000000000000
00000000000000000000000000000000000
[1].note.gnu.build-iNOTE00000000000001c8000001c8
00000000000000240000000000000000A004
[2].gnu.hashGNU_HASH00000000000001f0000001f0
000000000000003c0000000000000000A308
[3].dynsymDYNSYM000000000000023000000230
00000000000001e00000000000000018A428
[4].dynstrSTRTAB000000000000041000000410
00000000000001ab0000000000000000A001
[5].gnu.versionVERSYM00000000000005bc000005bc
00000000000000280000000000000002A302
[6].gnu.version_rVERNEED00000000000005e8000005e8
00000000000000400000000000000000A428
[7].rela.dynRELA000000000000062800000628
00000000000001200000000000000018A308
[8].rela.pltRELA000000000000074800000748
00000000000000900000000000000018A3108
[9].initPROGBITS00000000000007d8000007d8
000000000000001a0000000000000000AX004
[10].pltPROGBITS000000000000080000000800
00000000000000700000000000000010AX0016
[11].textPROGBITS000000000000087000000870
00000000000001740000000000000000AX0016
[12].finiPROGBITS00000000000009e4000009e4
00000000000000090000000000000000AX004
[13].rodataPROGBITS00000000000009ed000009ed
00000000000000080000000000000000A001
[14].eh_frame_hdrPROGBITS00000000000009f8000009f8
000000000000002c0000000000000000A004
[15].eh_framePROGBITS0000000000000a2800000a28
00000000000000a40000000000000000A008
[16].init_arrayINIT_ARRAY0000000000200da800000da8
00000000000000100000000000000000WA008
[17].fini_arrayFINI_ARRAY0000000000200db800000db8
00000000000000080000000000000000WA008
[18].jcrPROGBITS0000000000200dc000000dc0
00000000000000080000000000000000WA008
[19].data.rel.roPROGBITS0000000000200dc800000dc8
00000000000000080000000000000000WA008
[20].dynamicDYNAMIC0000000000200dd000000dd0
00000000000001f00000000000000010WA408
[21].gotPROGBITS0000000000200fc000000fc0
00000000000000400000000000000008WA008
[22].got.pltPROGBITS000000000020100000001000
00000000000000480000000000000008WA008
[23].bssNOBITS000000000020104800001048
00000000000000080000000000000000WA004
[24].commentPROGBITS000000000000000000001048
000000000000002c0000000000000001MS001
[25].shstrtabSTRTAB000000000000000000001074
00000000000000f90000000000000000001
[26].symtabSYMTAB000000000000000000001870
0000000000000600000000000000001827468
[27].strtabSTRTAB000000000000000000001e70
00000000000003350000000000000000001
KeytoFlags:
W(write),A(alloc),X(execute),M(merge),S(strings),l(large)
I(info),L(linkorder),G(group),T(TLS),E(exclude),x(unknown)
O(extraOSprocessingrequired)o(OSspecific),p(processorspecific)

責(zé)任編輯:xj

原文標(biāo)題:每天一個 Linux 命令(97):readelf 命令

文章出處:【微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207894
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    658

    瀏覽量

    21927
  • ELF文件
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    7116

原文標(biāo)題:每天一個 Linux 命令(97):readelf 命令

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式學(xué)習(xí)-常見的shell命令之其他命令

    用戶的信息用法:who示例:5、PS查詢進程命令命令:ps功能:顯示當(dāng)前操作系統(tǒng)中由該用戶運行的進程列表常見參數(shù):用法:示例1:ps示例2:ps -el查看所有進程的詳細(xì)信息示例3:使
    發(fā)表于 08-22 09:42

    常見的shell命令之其他命令

    用戶的信息用法:who示例:5、PS查詢進程命令命令:ps功能:顯示當(dāng)前操作系統(tǒng)中由該用戶運行的進程列表常見參數(shù):用法:示例1:ps示例2:ps -el查看所有進程的詳細(xì)信息示例3:使
    發(fā)表于 08-21 09:49

    是否可以使用esp8266創(chuàng)建熱點并使用此熱點設(shè)置新的wifi詳細(xì)信息?

    我想知道是否可以使用 esp8266 創(chuàng)建熱點并使用此熱點設(shè)置新的 wifi 詳細(xì)信息,在我的項目中,我需要使用移動應(yīng)用程序進行無線通信和設(shè)置 wifi 詳細(xì)信息,請從這里幫助我。非常歡迎提出建議和想法
    發(fā)表于 07-19 09:50

    Dave編譯后的bin格式文件大于hex格式文件,可能是什么原因呢?

    如題,今天使用Dave4.5編譯時,生成的.bin文件大于.hex文件,請問可能是什么原因呢?哪里沒設(shè)置嗎? .bin格式編譯的信息,使用release模式編譯的 .hex
    發(fā)表于 05-24 07:40

    請問STM32F469I-DISCO開發(fā)板支持哪些音頻/視頻格式文件?

    想了解下STM32F469I-DISCO開發(fā)板支持哪些音頻/視頻格式文件?
    發(fā)表于 05-11 08:07

    Kubectl核心命令總結(jié):如何快速掌握K8s

    設(shè)置 kubectl 命令交互的 kubernetes 集群并修改配置信息。參閱 使用 kubeconfig 文件進行跨集群驗證 獲取關(guān)于配置文件
    的頭像 發(fā)表于 02-23 14:43 ?364次閱讀
    Kubectl核心<b class='flag-5'>命令</b>總結(jié):如何快速掌握K8s

    ELF 1技術(shù)貼|如何支持exFAT和NTFS格式

    Linux操作系統(tǒng)通常能夠自動識別并掛載FAT32格式的磁盤,然而由于FAT32文件系統(tǒng)的限制,單個文件的最大存儲容量不得超過4GB。為了解決大文件傳輸問題,可選用exFAT或NTFS
    的頭像 發(fā)表于 01-31 16:37 ?548次閱讀
    <b class='flag-5'>ELF</b> 1技術(shù)貼|如何支持exFAT和NTFS<b class='flag-5'>格式</b>

    STM32CubeIDE找不到elf

    庫(STM32Cube),提供了豐富的開發(fā)工具和功能,幫助開發(fā)者更快、更方便地開發(fā)嵌入式應(yīng)用。 在使用STM32CubeIDE開發(fā)STM32應(yīng)用程序時,有時會遇到找不到elf文件的問題。本文將詳細(xì)介紹在
    的頭像 發(fā)表于 01-02 16:32 ?1358次閱讀

    linux更改ip步驟命令

    inux是一種廣泛應(yīng)用于服務(wù)器和嵌入式設(shè)備的操作系統(tǒng),通過更改IP地址,可以對網(wǎng)絡(luò)進行重新配置和優(yōu)化,以滿足不同的需求。在Linux中,可以使用不同的命令和配置文件進行IP地址的更改。本文將
    的頭像 發(fā)表于 11-27 14:38 ?1445次閱讀

    linux常用命令及作用

    可以顯示所有文件,包括隱藏文件;-l參數(shù)可以顯示文件詳細(xì)信息,包括權(quán)限、所有者、文件大小等等。 cd命令
    的頭像 發(fā)表于 11-13 16:45 ?698次閱讀

    linux系統(tǒng)查看ip地址命令

    當(dāng)前系統(tǒng)上所有網(wǎng)絡(luò)接口的詳細(xì)信息,包括IP地址。通常,IP地址會顯示在以 “inet” 開頭的行中。如果要查找特定網(wǎng)絡(luò)接口的IP地址,可以在命令后面加上接口名稱,例如: ifconfig eth0 這將
    的頭像 發(fā)表于 11-08 15:09 ?2265次閱讀

    linux中source命令的用法

    在Linux中,source命令通常用于重新執(zhí)行剛修改的初始化文件,使之立即生效,而不必注銷并重新登錄。source命令可以用于
    的頭像 發(fā)表于 11-08 14:35 ?1723次閱讀

    linux中查找文件命令

    在Linux中,可以使用以下命令來查找文件: find 命令:可以在指定目錄及其子目錄中查找文件,支持根據(jù)文件名、
    的頭像 發(fā)表于 11-08 14:24 ?1055次閱讀

    linux free命令原理

    Linux中的 free 命令是一個用于查看系統(tǒng)內(nèi)存使用情況的工具。它顯示了系統(tǒng)內(nèi)存的詳細(xì)信息,包括總內(nèi)存、已使用內(nèi)存、剩余內(nèi)存、緩存和緩沖區(qū)的使用情況等。 free 命令的工作原理是
    的頭像 發(fā)表于 11-08 11:23 ?443次閱讀

    WAV文件格式詳解

    WAV是微軟公司開發(fā)的一種音頻格式文件,用于保存Windows平臺的音頻信息資源,它符合資源互換文件格式(Resource Interchange File Format,RIFF)
    的頭像 發(fā)表于 10-21 09:52 ?4158次閱讀
    WAV<b class='flag-5'>文件格式</b>詳解