前提是知道 libxxx.a 是用什么平台编译出来的,就采用相应的工具链来操作:
(1) ar -x libxxx.a 命令可将 .a 文件生成若干个.o 文件
(2) objdump -D -S yyy.o 把 yyy.o 反汇编成 asm 汇编文件
具体命令的使用:
nm libxxx.a 可查看 .a 所依赖的库文件及源码中的函数接口名称
objdump -S libxxx.a 反汇编成汇编语言 但与平台严重相关, 有可能命令无法识别是什么平台的
ar -x libxxx.a 命令可将 .a 文件生成若干个.o 文件
创建一个库,请输入: ar -v -q lib.a strlen.o strcpy.o 显示库的目录,请输入: ar -v -t lib.a 替换或添加新成员到库中,请输入: ar -v -r lib.a strlen.o strcat.o 指定在何处插入新成员,请输入: ar -v -r -b strlen.o lib.a strcmp.o 更新一个已经更改过的成员,请输入: ar -v -r -u lib.a strcpy.o 更改库成员的顺序,请输入: ar -v -m -a strcmp.o lib.a strcat.o strcpy.o 解压缩库成员,请输入: ar -v -x lib.a strcat.o strcpy.o 解压缩并重命名一个成员,请输入: ar -p lib.a strcpy.o >stringcopy.o 删除一个成员,请输入: ar -v -d lib.a strlen.o 从多个用 ld 命令创建的共享模块中创建一个压缩文档库,请输入: ar -r -v libshr.a shrsub.o shrsub2.o shrsub3.o ... 编译并链接使用 libshr.a 压缩文档库的 main 程序,请使用以下命令:cc -o main main.c -L/u/sharedlib -lshr 列出 lib.a 的内容(忽略任何 32 位目标文件),请输入: ar -X64 -t -v lib.a 从 lib.a 解压缩所有 32 位的目标文件,请输入: ar -X32 -x lib.a 列出 lib.a 中的所有文件,无论是 32 位、64 位或非对象,请输入: ar -X32_64 -t -v lib.a
可以用“objdump -D”命令来反编译 .o 文件, 看你在编译c/c++用的-g级数, 如果-g3编译的,用objdump返汇编出来可以看到部分c/c++代码
Usage: objdump
Display information from object .
At least one of the following switches must be given:
-a, –archive-headers Display archive header information
-f, –file-headers Display the contents of the overall file header
-p, –private-headers Display object format specific file header contents
-h, –[section-]headers Display the contents of the section headers
-x, –all-headers Display the contents of all headers
-d, –disassemble Display assembler contents of executable sections
-D, –disassemble-all Display assembler contents of all sections
-S, –source Intermix source code with disassembly
-s, –full-contents Display the full contents of all sections requested
-g, –debugging Display debug information in object file
-e, –debugging-tags Display debug information using ctags style
-G, –stabs Display (in raw form) any STABS info in the file
-W, –dwarf Display DWARF info in the file
-t, –syms Display the contents of the symbol table(s)
-T, –dynamic-syms Display the contents of the dynamic symbol table
-r, –reloc Display the relocation entries in the file
-R, –dynamic-reloc Display the dynamic relocation entries in the file
-v, –version Display this program’s version number
-i, –info List object formats and architectures supported
-H, –help