【Linux】对共享库加载问题的深入理解——基本原理概述

原理概述

【linux】详解——库-CSDN博客

共享库被加载后,系统会为该共享库创建一个结构,这个结构体中的字段描述了库的各种属性。在内存中可能会加载很多库,每一个库都用一个结构体描述。把这些结构体用一些数据结构管理起来,系统对库的管理就转化成了对数据的管理

系统对加载到内存的共享库的信息是很清楚的

进程地址空间示意图

【Linux】进程地址空间-CSDN博客

每个进程都会有自己的地址空间,地址空间中的共享区用来映射共享库。

CPU在代码区执行数据时需要用到库中的方法会根据编译时就给定的地址跳转到共享区,共享区的虚拟地址通过页表的映射找到物理内存中相应的数据,然后加载到CPU运算。

如果虚拟地址在页表中没有与对应的物理地址建立映射关系就会发生缺页中断,系统会把磁盘中的对应的数据加载到内存,再让虚拟地址和物理地址建立映射关系,然后这部分数据被CPU调度执行。

多个进程的页表可能会映射同一个库,即共享库可以被多个进程使用

当一个进程要对库中定义的全局变量做写入时,系统会检查检查该全局变量的引用计数,若库是被多个进程共享的,就会发生写时拷贝。一个进程对共享库的任何操作都不会影响其他进程。

线性地址虚拟地址逻辑地址进程地址空间,其实是一个概念。采用的是全0到全1的编址,用线性地址来描述这样的编址方式是一种很形象的叫法。

虚拟地址和进程地址空间是进程层面的叫法,而逻辑地址是可执行程序中的地址分配方式。

编译器给代码的编址方式是虚拟地址,CPU执行拿到的地址也是虚拟地址。在CPU中,内置了指令集,能让CPU完成一些简单的动作。

比如函数跳转,拿着该函数的地址跳转到相应的地址空间,把相应的地址进行页表映射,拿到物理内存中相应的数据加载到CPU中调度执行。

也就是说从编译器为代码分配地址到CPU调度执行的地址都是虚拟地址,如果想拿到具体的数据只需通过虚拟地址在页表中找到对应的物理地址从而拿到相应的数据。

如果虚拟地址并没有在页表中与物理地址建立映射关系,即相应的数据并没有被加载到内存中,就会发生缺页中断,数据会从磁盘加载到内存,然后对应的虚拟地址与物理地址建立映射关系。

动态库在编译时会带上-fPIC选项,该选项表示与位置无关码

在编译库代码时,不会按逻辑地址的方式分配。

而是采用偏移量的方式,这样任意位置的代码数据可以映射到共享区中的任意位置,只需要知道库的开始位置被加载到哪里,只需用开始位置的地址加偏移量即可拿到该指令的虚拟地址,然后就是与页表映射的一系列操作了。

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

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

相关文章

WordPress Dokan Pro插件 SQL注入漏洞复现(CVE-2024-3922)

0x01 产品简介 WordPress Dokan Pro插件是一款功能强大的多供应商电子商务市场解决方案,功能全面、易于使用的多供应商电子商务平台解决方案,适合各种规模的电商项目。允许管理员创建一个多卖家平台,卖家可以注册账户并在平台上创建自己的店铺,展示和销售自己的产品。提供…

kali下安装使用蚁剑(AntSword)

目录 0x00 介绍0x01 安装0x02 使用1. 设置代理2. 请求头配置3. 编码器 0x00 介绍 蚁剑(AntSword)是一个webshell管理工具。 官方文档:https://www.yuque.com/antswordproject/antsword 0x01 安装 在kali中安装蚁剑,分为两部分&am…

Zabbix 监控系统部署

Zabbix 监控系统部署 Zabbix是一个企业级开源分布式监控解决方案,可监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的运行状况和完整性。 Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的警报。这允许…

java发送图文到公众号

这两天接到了一个新任务,通过后台管理编写文章,发送到官网的同时,推送一份到公众号,研究了一下微信的文档,发现不难,只需要有几个注意点就可以了。 注意: 微信公众号只能访问微信自己上传的图片…

STM32单片机实现串口IAP升级

一.概述 1.要实现串口IAP升级,首先要编写一个bootloader程序,然后再写支持IAP的app程序; 2.keil下bootloader的程序rom和ram设置 3.app程序要用bin文件 注:本文以STM32H743举例,其他stm32单片机IAP升级原理类似。 …

达梦数据库的系统视图v$database

达梦数据库的系统视图v$database 基础信息 OS版本: Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本: DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-20081在达梦数据库(Dameng Database&#xf…

Java——Lambda表达式

1. 背景 Lambda表达式是JavaSE 8中一个重要的新特性。Lambda表达式允许你通过表达式来代替功能接口。 Lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(…

C# YoloV8 模型效果验证工具(OnnxRuntime+ByteTrack推理)

C# YoloV8 模型效果验证工具(OnnxRuntimeByteTrack推理) 目录 效果 项目 代码 下载 效果 模型效果验证工具 项目 代码 using ByteTrack; using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using Sys…

【win11】Mouse without Borders安装问题以管理员权限安装msi文件

【win11】Mouse without Borders安装问题&以管理员权限安装msi文件 Mouse without Borders安装问题解决&以管理员权限安装msi文件启动Windows Installer服务以管理员权限安装msi文件 参考文献 Mouse without Borders安装问题 在win11下我双击MouseWithoutBorders2.2.1…

由监官要求下架docker hub镜像导致无法正常拉取镜像

问题:下载docker镜像超时 error pulling image configuration: download failed after attempts6: dial tcp 202.160.128.205:443: i/o timeout解决办法:配置daemon.json [rootbogon aihuidi]# cat /etc/docker/daemon.json {"registry-mirrors&qu…

20240628 每日AI必读资讯

📚 Hugging Face 推出新版开源大模型排行榜,中国模型 Qwen-72B 夺冠 - 阿里Qwen-2-72B指令微调版本问鼎全球开源大模型排行榜榜首 - Llama-3-70B 微调版本排名第二,而 Mixtral-8x22B 微调版本位居第四。 - 另外,微软的 Phi-3-M…

三种分布式锁实现方式

目录 1、数据库自增 2、Redis自增 3、Zookeeper 4、其他 4.1、雪花算法 4.2、Tinyid 4.3、Leaf 4.4、数据库号段 1、数据库自增 利用数据库表的自增特性,或主键唯一性,实现分布式ID REPLACE INTO id_table (stub) values (’a‘) ; SELECT LA…

社交App广告优化新篇章:Xinstall引领用户体验升级,助力买量效果提升

随着移动互联网的快速发展,社交App已经成为人们生活中不可或缺的一部分。然而,在竞争激烈的市场环境下,如何有效地进行广告投放,吸引并留住用户,成为了每个社交App运营者面临的重大挑战。今天,我们就来谈谈…

自费5K,测评安德迈、小米、希喂三款宠物空气净化器谁才是高性价比之王

最近,家里的猫咪掉毛严重,简直成了一个活生生的蒲公英,家中、空气中各处都弥漫着猫浮毛甚至所有衣物都覆盖着一层厚厚的猫毛。令人难以置信的是,有时我甚至在抠出的眼屎中都能发现夹杂着几根猫毛。真的超级困扰了。但其实最空气中…

Packer-Fuzzer一款好用的前端高效安全扫描工具

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、Packer Fuzzer介绍 Packer Fuzzer是一款针对Webpack…

麒麟系统安装MySQL

搞了一整天,终于搞定了,记录一下。 一、背景 项目的原因,基于JeecgBoot开发的系统需要国产化支持,这就需要在电脑上安装MySQL等支撑软件。 国产化项目的操作系统多是麒麟系统,我的系统如下: arm64架构。…

C#快速开发OPCUA服务器

为方便演示,此时创建一个控制台应用程序。第三方dll(C编写的库opcsrv.dll,他人实现)。 拷贝dll到运行目录下: 拷贝二次封装后的文件到项目目录下: 第一步:创建OpcUa服务器 //第一步:创建OpcUa服务器 OPCSr…

基于ssh框架的个人博客源码

基于ssh的个人博客源码,页面清爽简洁,原先有部分bug,运行不了,现已修复 1.博客首页 (本地访问地址 :localhost:8080/Blog/index/index) 2.关于我 3.慢生活 4.留言板 5.我的相册 微信扫码下载源码

商场配电新思维:智能网关驱动的自动化管理系统

在商场配电室监控系统中,主要是以无线网络为载体,目的就是便于对变电站等实时监测与控制。其中,4G配电网关非常关键,可以将配电室系统终端上的信息数据及时上传到服务器,再由服务器下达控制指令到各模块中,…

超越规模的冒险之旅:引导人工智能价值对齐

在茫茫技术之林中,人工智能凭借大模型占据了重要地位。人们已经不再局限于人机对弈和AI识图,开始探索那些能够模仿人类思考的机器。无论是日常聊天、文本写作,还是[在完美的提示词引导下创作出惊艳的诗歌],我们不得不承认AI工具已…