1. file
用于查看文件的简单信息
BriansdeMacBook-Pro:armeabi-v7a brian$ file libcheckcert.so
libcheckcert.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
2. strip
去除ELF文件中不必要的符号以及调试信息。
3. nm
查看ELF文件的符号
BriansdeMacBook-Pro:armeabi-v7a brian$ arm-linux-androideabi-nm -D libcheckcert.so
00004fb4 T JNI_OnLoad
00015da4 T _Unwind_Backtrace
000152a0 T _Unwind_Complete
000152a4 T _Unwind_DeleteException
00015d80 T _Unwind_ForcedUnwind
00015144 T _Unwind_GetCFA
0001623c T _Unwind_GetDataRelBase
00016220 T _Unwind_GetLanguageSpecificData
00016210 T _Unwind_GetRegionStart
........
这个是分析ELF文件最重要的工具之一,可以查看ELF文件的头部以及各个section和segment的详细信息。
5. objdump
与readelf功能相似,不同的是它们的实现方式不同,objdump是基于BFD(Binary Format Descriptor)库的,更加通用,而readelf是专门针对ELF格式文件的。另外,readelf可以显示调试信息,而objdump不行。
6. ldd
查看ELF文件所依赖的共享库的详细信息。
$ ldd /bin/ls
linux-gate.so.1 => (0xb7711000)
libselinux.so.1 => /lib/libselinux.so.1 (0xb76e5000)
librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb76dc000)
libacl.so.1 => /lib/libacl.so.1 (0xb76d4000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb758d000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7589000)
/lib/ld-linux.so.2 (0xb7712000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7570000)
libattr.so.1 => /lib/libattr.so.1 (0xb756b000)