ELF(Executable and Linkable Format)文件是一种用于可执行文件、目标文件和共享库的标准文件格式。它是在 UNIX 和类 UNIX 系统中广泛使用的文件格式之一。ELF 文件由以下几种类型:
-
可执行文件(Executable Files):包含可以直接在操作系统上运行的可执行程序的文件。当用户在终端中输入可执行文件的名称时,操作系统会加载该文件并执行其中的程序代码。
-
目标文件(Object Files):包含编译器生成的机器代码、符号表、重定位信息等。目标文件通常用于链接器将多个目标文件组合成一个可执行文件或共享库。
-
共享库文件(Shared Libraries):也称为动态链接库,包含可被多个程序共享的代码和数据。共享库文件可以在程序运行时动态加载到内存中,并被多个程序共享使用,这有助于减少程序的内存占用和提高代码重用性。
1.grep:搜索某个接口在哪个so使用
grep -r ss_mpi_sys_init ./
Binary file ./libbcamera_common.so matches
Binary file ./third_party/AscendCL/lib/libss_mpi.so matches
./third_party/AscendCL/include/ss_mpi_sys.h:td_s32 ss_mpi_sys_init(td_void);
./third_party/AscendCL/include/ss_mpi_sys.h:td_s32 ss_mpi_sys_init_pts_base(td_u64 pts_base);
2. file:可以用于确定文件的类型
file ./third_party/AscendCL/lib/libss_mpi.so
./third_party/AscendCL/lib/libss_mpi.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
3. ldd:用于打印出一个可执行程序或共享库所需要的共享库列表。
你可以在终端中运行以下命令来查看共享库文件所依赖的其他库文件。
ldd /path/to/libexample.so
这将列出共享库文件依赖的所有动态链接库,以及它们的路径
2. objdum、readelf、nm:查看共享库中的函数
nm
、objdump
和 readelf
这三个命令都可以用来查看共享库中的函数及其相关信息,包括函数的名称、地址、大小等。它们提供了不同的选项和输出格式,但基本功能是相似的。
-
nm:
nm
命令主要用于显示二进制文件的符号表信息,包括函数、变量和其他符号的名称和地址等。在查看共享库中的函数时,你可以使用-D
选项来只显示动态符号,即共享库中导出的符号。这些函数是共享库中可以被其他程序或共享库所使用的。 -
objdump:
objdump
命令是一个通用的二进制文件分析工具,可以用于显示 ELF 文件的各种信息,包括共享库中的函数。你可以使用-T
选项来显示共享库中的导出函数及其地址。 -
readelf:
readelf
命令也是用于查看 ELF 文件的信息的工具,它提供了更详细和全面的 ELF 文件结构的解析。你可以使用-s
选项来显示共享库中的符号表,包括函数、变量和其他符号。
4. 查看系统信息 uname -a
5. 查看cpu信息,一般来说可以使用 cat /proc/cpuinfo