- objdump 查看 ELF 文件内容
- objcopy 转换 ELF 文件格式
objdump
查看依赖项
- ldd
$ ldd exuberant-ctags.so linux-vdso.so.1 (0x00007ffc849e6000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f28eea31000) /lib64/ld-linux-x86-64.so.2 (0x00007f28ef025000)
- objdump
$ objdump -x exuberant-ctags.so | grep "NEEDED" NEEDED libc.so.6
查看动态符号表
$ objdump -T exuberant-ctags.so
查看所有符号
$ objdump -t exuberant-ctags.so
objcopy
Example
假如我们有个静态库,想做这么几个事儿:把一个函数作用域从全局修改为本地、把一个函数作用域从本地修改为全局、把一个函数的名字修改一下。那么步骤如下:
ar -x xxx.a //释放其中的.o文件
objdump -t xxx.o //查看导出符号表,可以看到导出的函数和引用的函数
objcopy –localize-symbol function_1 xxx.o xxx_new.o //把函数设置为本地
objcopy –globalize-symbol function_2 xxx.o xxx_new.o //把函数设置为全局可见
objcopy –redefine-sym old_func=new_func xxx.o xxx_new.o //重命名函数名
ar cqs xxx.a xxx_new.o //打包为静态库