musl libc ldso 动态加载研究笔记:动态库的加载次序与初始化次序

前言

  • musl ldso 是按照什么次序加载动态链接的应用程序的共享库的?如果共享库之间有依赖, musl ldso 如何处理先初始化哪个 共享库?

  • musl ldso 的代码可以在 musl 官方代码: ldso\dlstart.cldso\dynlink.c,其中动态库加载部分主要在 ldso\dynlink.c 中的 load_library 函数中实现。

动态库加载次序

  • 当前 musl ldso 加载次序 与 readelf -d xx.so 依赖动态库列表显示的一致,这个加载次序是链接时的依赖库的次序。如果想调整这个次序,就调整链接时的各个依赖库的先后次序即可

在这里插入图片描述

  • 动态库的加载次序,是按次序把依赖的动态库加载到内存,这个次序依次加载大部分情况下不重要

  • 如果两个没有依赖的共享库需要加载,动态库的初始化有先后的次序关系,建议调整链接时的动态库的先后次序,让需要先初始化的动态库放在前面(左边)

  • 依赖库初始化次序:这个重要,被依赖的先初始化,musl ldso 的设计满足这个要求,比如 A->B->C,则动态库初始化次序是:C->B->A。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

库的初始化次序

  • 两个动态库之间是否有依赖关系,在库的依赖列表中体现。

在这里插入图片描述

  • 多次库依赖,初始化最后端的依赖库, 如 A->B->C,初始化次序是: C->B->A

  • 如果两个库无依赖,初始化次序按照 应用程序依赖库的列表次序进行初始化

  • 可以库的调整链接次序,调整两个(两组)不相互依赖库的初始化次序

在这里插入图片描述

  • 调整链接时的动态库的次序,把 lib1 放在前面,则会先初始化 lib1 依赖的 lib3。所以初始化次序可以调整链接时的动态库的位置调整。

在这里插入图片描述

小结

  • 验证 musl ldso 的动态库加载,可以借助 gdb 调试 与 增加 LOG 打印的方式

  • 当前 musl ldso 的动态库加载虽然集成在 musl libc.so 中,但是功能依旧是完整、齐全的

  • 可以通过查看 musl 的代码,熟悉 ldso 动态加载的流程与实现方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/79963.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9 - 蓝图

蓝图: 将项目分成一个个单独的app模块,然后将所有app分配不同的处理功能,通过路由分配将它们连接成一个大项目 目录结构: 搭建框架: (1). 新键apps 包,编辑__init__.py文件 from flask import Flask import settings from apps.user.view import user_b…

docker使用安装教程

docker使用安装教程 一、docker安装及下载二、使用教程2.1 镜像2.2 容器2.3 docker安装Redis 一、docker安装及下载 一、安装 安装执行命令:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 二、启停常用命令 启动docker,执行命令&#xf…

指针(初阶)

1. 指针是什么? 指针是什么? 指针理解的2个要点: 1. 指针是内存中一个最小单元的编号,也就是地址 2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量 总结:指针就是地址&…

Langchain+LLM

LangChain是一个开源框架,允许开发人员在与人工智能(AI)一起工作时将大型语言模型(如GPT4)与外部计算和数据源相结合(它提供了一套工具、组件和接口,可简化创建由LLM提供支持的应用程序&#xf…

MySQL的基础操作

前言 对MySQL的一些基础操作做一下学习性的总结,基本上是照着视频写的。 MySQL的安装 MySQL的下载 MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 配置环境变量 下载之后直接解压&#xff0c…

回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测(多指标,多图)效果一览基本介绍…

前端进阶Html+css09----BFC模型

1.什么是BFC模型 全称是:Block formatting context(块级格式化上下文),是一个独立的布局环境,不受外界的影响。 2.FC,BFC,IFC 元素在标准流里都属于一个FC(Formatting Context)。 块级元素的布…

STM32--ADC模数转换

文章目录 ADC简介逐次逼近型ADCADC框图转换模式数据对齐转换时间校准ADC基本结构ADC单通道工程代码: ADC简介 STM32的ADC(Analog-Digital Converter)模拟-数字转换器,是一种逐次逼近型模拟数字转换器,可以将引脚上连续…

大学生创业出路【第二弹】科创训练营

目录 🚀一、我从哪里了解到的训练营 🚀二、训练营里学习和日常 🔎学习 🔎环境和设备 🔎遇到的人 🔎团队记录视频 🚀三、感悟 ​​​​个人主页:一天三顿-不喝奶茶&#x1f39…

【视觉SLAM入门】5.2. 2D-3D PNP 3D-3D ICP BA非线性优化方法 数学方法SVD DLT

"养气之学,戒之躁急" 1. 3D-2D PNP1.1 代数法1.1.1 DLT(直接线性变换法)1.1.2. P3P 1.2 优化法BA (Bundle Adjustment)法 2. 3D-3D ICP2.1 代数法2.1.1 SVD方法 2.2 优化(BA)法2.2.2 非线性优化方法 前置事项: 1. 3D-2D PNP 该问题描述为&am…

Windows安装 Elasticsearch 教程

下载地址 Past Releases of Elastic Stack Software | Elastic 解压 解压完的样子 进入BIN目录 D:\Develop\elasticsearch\elasticsearch-7.12.0\bin 按住shift 鼠标右键 打开 powershell 窗口 查看ES版本 .\elasticsearch.bat --version 出现问题了 警告:不赞成…

smiley-http-proxy-servlet 实现springboot 接口反向代理,站点代理,项目鉴权,安全的引入第三方项目服务

背景: 项目初期 和硬件集成,实现了些功能服务,由于是局域网环境,安全问题当时都可以最小化无视。随着对接的服务越来越多,部分功能上云,此时就需要有一种手段可以控制到其他项目/接口的访问权限。 无疑 反向…