查看Linux下库的信息
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365)
最近在研究USB key的使用,涉及到各种CPU架构的支持。厂家提供的资料,相当的粗糙,有X86的、Arm64的和MIPS的。库名都一样,压根搞不清对应关系。
在朋友的指点下,查了下Linux下对文件信息的解析方法。我觉得还是比较简单实用的,在此把操作过程记录下来。
查看文件信息,可以使用file和objdump命令,后一个命令的功能相对丰富些,两者可配合使用。
1 objdump命令
其主要功能如下:
可以使用objdump查看库文件的组成:
robin@robin-virtual-machine:~ /yinhe$ objdump -a libRockeyARM.a
In archive libRockeyARM.a:
rc4.o: file format elf64-littl
rw-r--r-- 0/0 1672 Jan 1 08:00 1970 rc4.o
des.o: file format elf64-little
rw-r--r-- 0/0 4656 Jan 1 08:00 1970 des.o
(下略)
objdump命令可以用来查看符号表,各种函数、对外部库的引用等,是一个不错的辅助工具。不过,对于库支持哪个CPU架构,它好像没法探查出来。
2 file命令
file命令的语法相对简单些,其功能如下:
robin@robin-virtual-machine:~/ yinhe$ file
Usage: file [-bcEhikLlNnprsvzZ0] [--apple] [--extension] [--mime-encoding] [--mime-type]
[-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...
file -C [-m magicfiles]
file [--help]
不过,由于我使用的库经过压缩,直接去读,是看不出什么信息的:
$ file libRockeyARM.a
libRockeyARM.a: current ar archive
首先应该使用ar命令,将库解压,然后再去查看文件信息。
$ ls
libRockeyARM.a
$ ar -x libRockeyARM.a
$ ls
ccid.o descriptors.o des.o Dongle_API.o Dongle_CORE.o error.o libRockeyARM.a linux.o md5.o mysha1.o rc4.o rsa.o usb.o
可以看出,库文件解压出很多obj文件。我的目标是查看库所支持的cpu架构,查看其中的任意一个文件,即可得到所需要的信息:
$ file ccid.o
ccid.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped
这个库是由厂家提供的,在银河麒麟的包中,从中可以看出,它是支持ARM64位的。
而在中标麒麟的包中,这个库是支持MIPS的,当然就是龙芯的CPU了:
$ file ccid.o
ccid.o: ELF 64-bit LSB relocatable, MIPS, MIPS64 rel2 version 1 (SYSV), not stripped
windows下也可以使用这些gnu的工具,网址:http://gnuwin32.sourceforge.net/packages.html
不过,objdump好像没有包含在内。Windows下查看obj文件的工具,名字为dumpbin,包含在每个VS的开发工具中,其功能也很强大,在UEFI开发探索26 中,曾经使用过它。
本文地址:https://blog.csdn.net/luobing4365/article/details/107577136
上一篇: 字节面试复盘总结