Linux之查看so/bin依赖(三十一)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:如何查看so、bin启动依赖的库文件,帮助开发者快速定位问题。
2.实践
<1>.readelf命令
在Linux平台上,readelf
是一个非常有用的命令行工具,用于分析可执行文件、共享库和目标文件的ELF格式(Executable and Linkable Format,可执行和可链接格式)的信息。ELF是Linux系统和其他类Unix系统上可执行文件和对象文件的标准格式。
以下是一些常用的readelf
命令选项和作用:
-
readelf -h <filename>
:显示目标文件的文件头信息,包括文件类型、目标体系结构、入口点地址等。 -
readelf -l <filename>
:显示目标文件的程序头信息,包括段的起始地址、大小和属性等。 -
readelf -S <filename>
:显示目标文件的节头信息,包括节的名称、起始地址、大小、属性等。 -
readelf -s <filename>
:显示目标文件的符号表,包括函数、变量和其他符号信息。 -
readelf -r <filename>
:显示目标文件的重定位表,展示代码和数据的重定位信息。 -
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
命令选项和作用:
-
objdump -d <filename>
:对目标文件进行反汇编,显示其二进制代码和汇编指令。 -
objdump -t <filename>
:显示目标文件的符号表,包括函数、变量和节等信息。 -
objdump -r <filename>
:显示目标文件的重定位表,展示代码和数据的重定位信息。 -
objdump -x <filename>
:显示目标文件的所有头部信息,包括段、节和其他文件头信息。 -
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
命令常用的选项和作用:
-
otool -h
:显示可执行文件或共享库的文件头信息,包括文件类型、可执行文件的入口点等。 -
otool -l
:显示二进制文件的加载命令信息,包括依赖的动态库、段和节的信息等。 -
otool -L
:显示二进制文件依赖的动态库和其对应的路径。 -
otool -tV
:显示二进制文件的文本节(Text Section)的内容,其中包含了可执行代码。 -
otool -d
:显示共享库的动态链接信息,包括其他共享库的引用。 -
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
相关文章:

Linux之查看so/bin依赖(三十一)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
day-45 代码随想录算法训练营(19)动态规划 part 07
70.爬楼梯(进阶) 分析:基本动态规划转换为完全背包,因为1、2 两种上楼梯方式是无限选择的 思路: 1. j 表示 容量为 j 时,装满有dp[j]种方法2. dp[j]dp[j-nums[i]]3. 初始化 dp[0]1,dp[1]14. 遍历顺序&am…...
static关键字和final关键字
在java的关键字中,static关键字和final关键字是两个必须掌握的关键字。static关键字和final关键字用法多样,且在一定环境下使用,可以提高程序的运行性能,优化程序的结构。下面将依次介绍static关键字和final关键字。注意ÿ…...

使用Postman如何在接口测试前将请求的参数进行自定义处理
1、前言 当我们使用 Postman 进行接口测试时,对于简单的不需要处理的接口,直接请求即可,但是对于需要处理的接口,如需要转码、替换值等,则就麻烦一些,一般我们都是先手动把修改好的值拷贝到请求里再进行请…...

QT第二天
1.优化登陆界面,当点击登录按钮后,在该按钮对应的槽函数中,判断账户和密码框内的数据是否为admin和123456,如果账户密码匹配成功,则提示登陆成功并关闭登录界面,如果账户密码匹配失败,则提示登录…...

鸿蒙应用程序入口UIAbility详解
一、UIAbility概述 UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。每一个UIAbility实例,都对应于一个最近任务列表中的任务。一个应用可以有一个UIAbility&am…...

扫地僧站群·静态养站王:自动万站智能LOGO功能说明
扫地僧站群静态养站王:自动万站智能LOGO功能说明,无需配置,自动根据网站状态生成对应LOGO,高质量LOGO万站不重样.说明:模板调用智能LOGO方式:{当前域名}/logo.png 自动识别HTTP/HTTPS 只需在模板需要展示LOGO的地方放上如上标签即可。以下为L…...

【Day-32慢就是快】代码随想录-二叉树-合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接…...

接口测试系列 —— 什么是接口测试?
接口测试系列 为什么要做这个事情? 对自己过往在接口测试上的经验,写一个小结的系列文章,是一个系统性的思考和知识构建。发布的同时,也是希望获得更多感兴趣的同学的意见和反馈,可以把这个部分做的更好。 接口测试概…...

qt作业day2
//widget.cpp#include "widget.h" #include "ui_widget.h"void Widget::usr_login() {if("admin" this->edit_acc->text()){if("123456" this->edit_psd->text()){speech->say("登录成功");emit jump_sig1…...

JWT一篇通
JWT 是什么? JWT(JSON Web Token)是一种开放的标准,标准的编号是RFC7591。用于在不同实体之间安全地传输信息。它是基于 JSON 编码的令牌。 JWT 的组成 JWT由三个部分组成:头部(Header)、载荷…...
【2023-09-01】vue中自定义按钮设置disabled属性后,异常触发click事件
vue中自定义按钮设置disabled属性后,异常触发click事件 项目中自定义按钮,使用a标签实现。设置disabled属性后,点击可以触发click事件。 由于各种原因,项目中并未使用成熟的第三方组件库,例如element-ui,a…...
nginx报错file not found解决
文章目录 一、nginx配置文件修改1.1 配置文件位置1.2 php fastcgi配置1.3 测试 二、nginxphp运行原理三、外网访问内网设置 采用nginxphp作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如…...

【力扣】96. 不同的二叉搜索树 <动态规划>
【力扣】96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5 示例 2: 输入&am…...

Win11搭建 Elasticsearch 7 集群(一)
一: ES与JDK版本匹配一览表 elasticsearch从7.0开始默认安装了java运行环境,以便在没有安装java运行环境的机器上运行。如果配置了环境变量JAVA_HOME,则elasticsearh启动时会使用JAVA_HOME作为java路径,否则使用elasticsearch根目…...

哭了,python自动化办公,终于支持 Mac下载了
想了解更多精彩内容,快来关注程序员晚枫 大家好,这里是程序员晚枫,小红薯/小破站也叫这个名。 在我的主页发布的免费课程:给小白的《50讲Python自动化办公》,一直在更新中,昨晚12点多,有朋友在…...

【已更新建模代码】2023数学建模国赛B题matlab代码--多波束测线问题
一、 问题重述 1.1问题背景 海洋测深是测定水体深度与海底地形的重要任务,有两种主要技术:单波束测 深与多波束测深。单波束适用于简单任务,但多波束可提供更精确的地形数据。多 波束系统的关键在于覆盖宽度与重叠率的设计,以确保…...

GMSL技术让汽车数据传输更为高效(转)
目前,大部分车企都在其旗舰车型上配备了达到Level 2水平的自动驾驶技术,也就是高级自动驾驶辅助 ADAS系统。ADAS系统硬件主要由以下几部分组成,包括传感器、串行器、解串器、ADAS处理器等。 除了ADAS系统,包括传感器融合、音视频影…...

ARM+Codesys标准通用型控制器
整机工业级设计,通讯外设经过隔离保护 电源宽电压设计(9~36V DC ) 丰富的通讯接口,满足多种场合控制和通讯需求 四核工业级处理器,高性能,低功耗,高可靠性 机身无风扇设计,外壳小巧 搭载内核 100% 自主…...

YOLOV8从零搭建一套目标检测系统(修改model结构必看)附一份工业缺陷检测数据集
目录 1.YOLOV8介绍 2.YOLOV8安装 2.1环境配置 3.数据集准备 1.YOLOV8介绍 Yolov8结构图: YoloV8相对于YoloV5的改进点: Replace the C3 module with the C2f module. Replace the first 6x6 Conv with 3x3 Conv in the Backbone. Delete two Convs …...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...