readelf命令
readelf用来显示ELF格式目标文件的信息.可通过参数选项来控制显示哪些特定信息。
(注意: readelf不支持显示archive文档, 也不支持64位的ELF文件)。
使用方法1:
查看共享库的依赖库(NEEDED)和搜索名(SONAME)。
readelf -d <file_name>
例如:
#readelf -d libuClibc-0.9.30rc2.so
Dynamic section at offset 0x90f50 contains 18 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [ld-uClibc.so.0]
0x0000000e (SONAME) Library soname: [libc.so.0]
......
使用方法2:
显示ELF头信息
readelf -h <file_name>
例如:
#readelf -h libuClibc-0.9.30rc2.so
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: DYN (Shared object file)
......
-a
--all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I.
-h
--file-header 显示elf文件开始的文件头信息.
-l
--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段信息。当前只支持IA64 ELF的unwind段信息。
-d
--dynamic 显示动态段的信息。
-V
--version-info 显示版本段的信息。
-A
--arch-specific 显示CPU构架信息。
-D
--use-dynamic 使用动态段中的符号表显示符号,而不是使用符号段。
附加:
readelf与objdump命令的区别:
1) objdump使用了bfd库进行文件读取,而readelf则没有,另外写的一套代码,且对一些条件的判断并不是很严格。比如对于没有指定处理方式的CPU类型,BFD库将拒绝往下执行,readelf还是可以显示其内容。
2) readelf可以显示调试信息,而objdump则没有。但是实际上bfd库支持DWARF的处理,通过简单处理objdump也可以显示调试信息,就如同nm做的那样。