objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,在分析so库文件时作用也非常显著。
在linux下编译ffmpeg最新版3.1.4,在lib文件夹中得到libavcodec.so文件
使用objdump -x命令分析该so文件:
objdump的help如下:-x, –all-headers Display the contents of all headers
能得到该so文件所依赖的库及版本,以及各个段的信息
版本定义: 1 0x01 0x0e9774b7 libavcodec.so.57 2 0x00 0x035ff8b7
LIBAVCODEC_57版本引用: required from libz.so.1:
0x0827e5c0 0x00 11 ZLIB_1.2.0 required from libswresample.so.2:
0x03a93182 0x00 09 LIBSWRESAMPLE_2 required from libc.so.6:
0x06969194 0x00 12 GLIBC_2.14
0x0d696914 0x00 10 GLIBC_2.4
0x09691974 0x00 07 GLIBC_2.3.4
0x09691a75 0x00 06 GLIBC_2.2.5 required from libpthread.so.0:
0x09691a75 0x00 08 GLIBC_2.2.5
0x09691972 0x00 05 GLIBC_2.3.2 required from libavutil.so.55:
0x0f818435 0x00 04 LIBAVUTIL_55 required from libm.so.6:
0x09691a75 0x00 03 GLIBC_2.2.5
使用objdump -T分析ELF文件,能得到文件的dynamic symbol table
libavcodec.so.57.48.101: 文件格式 elf64-x86-64
DYNAMIC SYMBOL TABLE:
00000000007de490 g DO .rodata 0000000000000011 LIBAVCODEC_57 avpriv_mjpeg_bits_ac_luminance
00000000001483a0 g DF .text 0000000000000026 LIBAVCODEC_57 av_picture_copy
其中导出的函数信息在代码段或者数据段内
在可执行文件ffmpeg内也能找到该so的函数