当前位置: 首页 > news >正文

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 <filename>:显示目标文件的文件头信息,包括文件类型、目标体系结构、入口点地址等。

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

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

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

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

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

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]

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

<2>.objdump命令

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

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

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

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

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

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

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

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

# objdump -p libstagefrighthw.so | grep -i needNEEDED               libutils.soNEEDED               libcutils.soNEEDED               liblog.soNEEDED               libc++.soNEEDED               libc.soNEEDED               libm.soNEEDED               libdl.soVERNEED              0x0000000000000530VERNEEDNUM           0x0000000000000003

<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

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
http://www.lryc.cn/news/159566.html

相关文章:

  • day-45 代码随想录算法训练营(19)动态规划 part 07
  • static关键字和final关键字
  • 使用Postman如何在接口测试前将请求的参数进行自定义处理
  • QT第二天
  • 鸿蒙应用程序入口UIAbility详解
  • 扫地僧站群·静态养站王:自动万站智能LOGO功能说明
  • 【Day-32慢就是快】代码随想录-二叉树-合并二叉树
  • 接口测试系列 —— 什么是接口测试?
  • qt作业day2
  • JWT一篇通
  • 【2023-09-01】vue中自定义按钮设置disabled属性后,异常触发click事件
  • nginx报错file not found解决
  • 【力扣】96. 不同的二叉搜索树 <动态规划>
  • Win11搭建 Elasticsearch 7 集群(一)
  • 哭了,python自动化办公,终于支持 Mac下载了
  • 【已更新建模代码】2023数学建模国赛B题matlab代码--多波束测线问题
  • GMSL技术让汽车数据传输更为高效(转)
  • ARM+Codesys标准通用型控制器
  • YOLOV8从零搭建一套目标检测系统(修改model结构必看)附一份工业缺陷检测数据集
  • Maven 的其它插件
  • 系列十三、Java操作RocketMQ之带Key的消息
  • C#调用Dapper
  • 2023高教杯数学建模1:ABC题目+初步想法
  • ApachePulsar原理解析与应用实践(学习笔记一)
  • 2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书南京财经大学图书馆
  • qt 信号与槽机制,登录界面跳转
  • uniapp的两个跳转方式
  • 【LeetCode】1654:到家的最少跳跃次数的解题思路 关于力扣无法return的BUG的讨论
  • Calico IP In IP模拟组网
  • 在linux上挂载windows共享目录