• Linux之查看so/bin依赖(三十一)


    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

    优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

    人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

    更多原创,欢迎关注:Android系统攻城狮

    欢迎关注Android系统攻城狮

    1.前言

    本篇目的:如何查看so、bin启动依赖的库文件,帮助开发者快速定位问题。

    2.实践

    <1>.readelf命令

    在Linux平台上,readelf是一个非常有用的命令行工具,用于分析可执行文件、共享库和目标文件的ELF格式(Executable and Linkable Format,可执行和可链接格式)的信息。ELF是Linux系统和其他类Unix系统上可执行文件和对象文件的标准格式。

    以下是一些常用的readelf命令选项和作用:

    1. readelf -h :显示目标文件的文件头信息,包括文件类型、目标体系结构、入口点地址等。

    2. readelf -l :显示目标文件的程序头信息,包括段的起始地址、大小和属性等。

    3. readelf -S :显示目标文件的节头信息,包括节的名称、起始地址、大小、属性等。

    4. readelf -s :显示目标文件的符号表,包括函数、变量和其他符号信息。

    5. readelf -r :显示目标文件的重定位表,展示代码和数据的重定位信息。

    6. readelf -d :显示目标文件的动态节信息,包括依赖的共享库、动态链接信息等。

    readelf命令对于调试、分析和了解可执行文件和目标文件的结构非常有用。它可以帮助开发者查看文件的头部、节、符号表等信息,了解程序的组织结构、依赖关系和动态链接信息,有助于进行代码审计、调试和性能优化。

    # readelf -a libstagefrighthw.so | grep -i needed
    0x0000000000000001 (NEEDED)             共享库:[libutils.so]
     0x0000000000000001 (NEEDED)             共享库:[libcutils.so]
     0x0000000000000001 (NEEDED)             共享库:[liblog.so]
     0x0000000000000001 (NEEDED)             共享库:[libc++.so]
     0x0000000000000001 (NEEDED)             共享库:[libc.so]
     0x0000000000000001 (NEEDED)             共享库:[libm.so]
     0x0000000000000001 (NEEDED)             共享库:[libdl.so]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    otool命令用于调试和分析可执行文件和共享库。

    <2>.objdump命令

    在Linux平台上,objdump是一个非常有用的命令行工具,用于反汇编目标文件。它可以对可执行文件、共享库和目标文件进行静态反汇编,以便查看其二进制代码的详细信息。objdump提供了各种选项,可以用于分析目标文件、查看符号表、显示程序入口点、反汇编代码以及更多。

    以下是一些常用的objdump命令选项和作用:

    1. objdump -d :对目标文件进行反汇编,显示其二进制代码和汇编指令。

    2. objdump -t :显示目标文件的符号表,包括函数、变量和节等信息。

    3. objdump -r :显示目标文件的重定位表,展示代码和数据的重定位信息。

    4. objdump -x :显示目标文件的所有头部信息,包括段、节和其他文件头信息。

    5. objdump -S :将源代码和反汇编代码以交叉的方式显示,方便进行源码和汇编代码的对比。

    objdump用于软件调试、逆向工程和软件安全分析。

    # objdump -p libstagefrighthw.so | grep -i need
      NEEDED               libutils.so
      NEEDED               libcutils.so
      NEEDED               liblog.so
      NEEDED               libc++.so
      NEEDED               libc.so
      NEEDED               libm.so
      NEEDED               libdl.so
      VERNEED              0x0000000000000530
      VERNEEDNUM           0x0000000000000003
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    <3>.Mac OS平台工具:otool

    在Mac OS平台上,otool命令用于分析可执行文件、共享库和内核扩展。它可以提供关于这些二进制文件的信息,包括文件的结构、依赖关系和符号表等内容。以下是otool命令常用的选项和作用:

    1. otool -h:显示可执行文件或共享库的文件头信息,包括文件类型、可执行文件的入口点等。

    2. otool -l:显示二进制文件的加载命令信息,包括依赖的动态库、段和节的信息等。

    3. otool -L:显示二进制文件依赖的动态库和其对应的路径。

    4. otool -tV:显示二进制文件的文本节(Text Section)的内容,其中包含了可执行代码。

    5. otool -d:显示共享库的动态链接信息,包括其他共享库的引用。

    6. otool -arch:指定CPU架构,可以用于查看特定架构的二进制文件信息。

    #    otool -L xxx.dylib
    
    • 1

    3.如果以上三种命令没有满足你的需求:请继续往下看

    ###<4>.strings命令
    Linux中的strings命令用于在一个文件中查找并打印可打印字符序列。它的主要作用是从二进制文件中提取文本信息,例如从可执行文件或库文件中提取字符串常量。

    # strings libstagefrighthw.so |grep .so
    liblog.so
    libc.so
    libdl.so
    libutils.so
    libcutils.so
    libc++.so
    libm.so
    libstagefrighthw.so
    libOmxCore.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    springboot基于web的摩托车销售系统的设计与实现毕业设计源码031706
    DPU — 功能特性 — 管理系统的硬件卸载
    python3中 三个点是啥意思?
    一个注解让 Spring Boot 项目接口返回数据脱敏
    晋级名单揭晓,中秋&国庆双节喜迎“梧桐杯”省级决赛!
    2022河南萌新联赛第(七)场:南阳理工学院 F-数对
    Springboot项目整合jieba分词,实现语句最精确的切分
    降水检验项目展示(工作机会/私活请私信我)
    【数据处理】Python matplotlib绘制双柱状图以及绘制堆积柱状图——保姆级教程
    解决kubernetes node节点flannel网卡始终不能添加成功的问题
  • 原文地址:https://blog.csdn.net/u010164190/article/details/132757359