readelf命令用于显示一个或多个elf格式的目标文件的信息,并且可以选择控制显示哪些信息。 其中的elf-file(s )表示已检查的文件。 它支持32位、64位elf格式的文件和包含elf文件的文档。 这里通常指的是使用ar命令打包几个elf文件后生成的“静态库”文件,如lib*.a。
运行readelf时,必须指定一个-v和-H以外的选项。
ELF文件类型
ELF文件
可重定位文件:用户与其他目标文件一起创建可执行文件,或创建共享目标文件,如lib*.a文件。
可执行文件:用于生成进程映像,并将其加载到内存中执行。 例如,编译的可执行文件a.out。
共享目标文件:用于与其他共享目标文件或可重定位文件一起生成elf目标文件,或与可执行文件(如lib*.so文件)一起创建进程映像。
ELF文件作用
由于ELF文件涉及程序连接(生成程序)和程序运行,因此可以从多个角度查看ELF格式的文件。
用于编译和链接(可重定位文件)时,编译器和链接器将elf文件视为节标头表中描述的节的集合,程序标头表是可选的。
加载执行(可执行文件)时,加载器将elf文件视为程序头表中描述的段的集合。 一个段可能包含多个节,节标题表是可选的。
对于共享文件,这两者都包括在内。
ELF文件总体组成
elf文件标头描述了elf文件的总体信息。 包括系统相关、类型相关、加载相关、链接相关。
根据系统关联,elf文件标记的魔术数、硬件和平台等相关信息,提高了elf文件的可移植性,
允许交叉编译。
加载相关:包含有关程序头表的信息。
链接相关:节标题表相关信息。
参数
optionsdesdescription-aall显示所有信息,- h-l-s-s-r-d-v-a-I.- h-file-header是elf文件开头的文件头信息.-- 显示-t-Section-details部分的详细信息(-s中的)。 -s-syms -symbols (显示符号表段中的项目(如果有) )。 -e-headers显示所有标头信息,等效于: -h -l -S-n-notes显示note段(内核注释)的信息。 -r-Relocs显示可重新定位段的信息。 显示-u-unwindunwind段信息。 当前仅支持IA64 ELF的unwind分段信息。 - d动态显示动态段的信息。 -v-version-info显示版本段的信息。 -A-arch-specific显示CPU框架信息。 -D-use-dynamic使用动态段中的符号表而不是符号段来显示符号。 - I -如果histogram显示符号,则会显示bucket list长度的条形图。 -v-version显示自述文件的版本信息。 - hhelp显示readelf支持的命令行选项。 - w宽行输出。