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)
……
与objdump命令的区别
1) objdump使用了bfd库进行文件读取,而readelf则没有,另外写的一套代码,且对一些条件的判断并不是很严格。比如对于没有指定处理方式的CPU类型,BFD库将拒绝往下执行,readelf还是可以显示其内容。
2) readelf可以显示调试信息,而objdump则没有。但是实际上bfd库支持DWARF的处理,通过简单处理objdump也可以显示调试信息,就如同nm做的那样。