摘要readelf命令用于显示一个或多个elf格式的目标文件的信息,通过该选项可以控制显示的信息。 其中的elf-file(s )表示已检查的文件。 它支持32位、64位elf格式的文件和包含elf文件的文档。 这里通常指的是使用ar命令打包几个elf文件后生成的“静态库”文件,如lib*.a。 此程序类似于objdump提供的功能,但它显示更具体的信息并独立于BFD库,因此即使BFD库中存在错误也不会影响readelf程序。 BFD库是一个GNU项目,其目标是在统一的界面中处理不同的目标文件。
运行readelf时,必须指定一个-v和-H以外的选项。
ELF文件类型可重定位文件:用户与其他目标文件一起创建可执行文件,或创建共享目标文件,如lib*.a文件。 可执行文件:用于生成进程映像,并将其加载到内存中执行。 例如,编译的可执行文件a.out。 共享目标文件:用于与其他共享目标文件或可重定位文件一起生成elf目标文件,或与可执行文件(如lib*.so文件)一起创建进程映像。
ELF文件提供与程序的连接(生成程序)和执行程序的ELF文件,因此可以从多个角度查看ELF格式的文件。
用于编译和链接(可重定位文件)时,编译器和链接器将elf文件视为节标头表中描述的节的集合,程序标头表是可选的。 加载执行(可执行文件)时,加载器将elf文件视为程序头表中描述的段的集合。 一个段可能包含多个节,节标题表是可选的。 对于共享文件,这两者都包括在内。
ELF文件的整体结构
elf文件标头描述了elf文件的总体信息。 包括系统相关、类型相关、加载相关、链接相关。
根据系统关联,关于elf文件标记的魔术数、硬件和平台等的信息,提高了elf文件的可移植性,能够交叉编译的类型关联为上述类型。 加载相关:包含有关程序头表的信息。 链接相关:节标题表相关信息。 选项-a
--all表示所有信息,与-h -l -S -s -r -d -V -A -I等价。
-h
--file-header显示elf文件开头的文件头信息。
-l
- -程序头
-显示-segments(jmddx )信息(如果有)。
-S
--section-headers
- -显示--sections节标题信息(如果有)。
-g
--section-groups部分组信息(如果存在)将显示。
-t
显示--Section-details部分的详细信息(-s中的)。
-s
--syms
--symbols显示符号表段中的项目。
-e
--headers显示所有标头信息,等效于: -h -l -S
-n
-显示-notesnote段(内核注释)的信息。
-r
--relocs显示可重新定位段的信息。
-u
-显示未使用的未使用的段信息。 当前仅支持IA64 ELF的unwind分段信息。
-d
- -动态显示动态段的信息。
-V
- -版本信息显示版本段的信息。
-A
--arch-specific显示CPU框架信息。
-D
--use-dynamic使用动态段中的符号表而不是符号段来显示符号。
-xnumber or name
--hex-dump=number or name以十六进制形式显示指定字段中的内容。 number指定段表格中间的索引,或通过字符串指定文件中的段名称。
-w[liaprmfFsoR] or
--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=interp,=str,=
-I
- -当--histogram显示符号时,将显示bucket list长度的条形图。
-v
--version显示自述版本信息。
-H
--help显示readelf支持的命令行选项。
-W
- -宽--wide行输出。
@file可以将选项组合成一个文件,并使用此@file选项加载。