动态库加载【Linux】

从此往后,建立映射,我们执行的任何代码,都是在我们的进程地址空间中进行执行
例如:将动态库映射到共享区,进程在CPU调度时,是在进程的进程地址空间处运行

程序在编译好之后,在加载到内存之前,程序内部是有逻辑地址(虚拟地址)

可执行程序在最开始有表头,可执行程序的入口地址就在表中,这个入口地址是虚拟地址

程序加载到内存中,CPU内读取到的指令,内部可能有数据,可能也有地址(虚拟地址

静态库不需要加载,在加载程序也就是编译链接时,系统就会将静态库的代码拷贝到可执行程序的代码段里面

程序加载到内存之前:
在这里插入图片描述

此时页表没有建立与物理内存的映射,发生缺页中断,缺页中断后 ,程序就被加载到物理内存中,一旦程序加载到物理内存之后,就天然的具备了物理地址

程序加载到内存后:
动态库只将可执行程序用到的库函数的偏移地址拷贝到可执行程序里面,动态库中所有库函数的编址方案都采用start:偏移地址的方式来进行相对编址
在这里插入图片描述

CPU执行代码时,发现物理内存中有外部地址,这个外部地址就是编译链接阶段动态库中函数的偏移地址,此时操作系统先将这个外部地址对应的动态库加载到物理内存中,再执行相关代码,然后通过页表将物理内存中动态库的位置映射到虚拟地址空间中的共享区,一旦动态库被映射到共享区,此时这个库的起始地址立马被确定,完成映射之后

利用虚拟地址空间的库函数的偏移量 ,在虚拟地址空间的上下文中进行跳转,跳转到共享区中,利用库的起始地址和具体库函数的偏移量,在共享区中找到库函数的二进制代码并将其执行,执行完毕之后,再跳转到代相对地址码段中,继续向后执行剩余的代码

共享库是一个非常大的空间,具体映射到哪里?

动态库被加载到固定地址空间中的位置是不可能的,但是需要保证库在虚拟内存中,是任意位置加载的

让库的内部函数不要采用绝对编址,编址方案都采用start:直接用偏移量进行对库中函数进行编址,将每个函数的start地址记录,通过start地址加上偏移量,操作系统就能找到具体地址,找到地址,通过地址,进过映射,找到对应的代码

这也就能解释,在动态生成.o文件时,gcc编译加 -fPIC 选项(产生位置无关码),
位置无关码可以理解为,编址时,库可以在虚拟内存的任意位置加载

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

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

相关文章

欧美北美南美国外媒体投稿和东南亚中东亚洲媒体海外新闻发稿软文推广营销策略有哪些?

在当今全球化的浪潮中,中国品牌正积极拓展海外市场,寻求更广阔的发展空间。面对国际竞争,有效的海外媒体发稿营销策略对于品牌国际化至关重要。以下是一些关键点和建议,以帮助品牌在海外市场取得成功。 深入了解目标市场&#xf…

Linux 内核之 mmap 内存映射触发的缺页异常 Page Fault

文章目录 前言一、简介1. MMU 内存管理2. 缺页中断3. 页表4. 小节 二、mmap 提前分配物理内存1. mm_populate 函数2. __mm_populate 函数3. populate_vma_page_range 函数4. __get_user_pages 函数5. find_extend_vma 函数6. find_vma 函数7. follow_page_mask 函数8. follow_p…

Ubuntu22.04 下 pybind11 搭建,示例

Pybind11 是一个轻量级的库,用于在 C 中创建 Python 绑定。Ubuntu22下安装pybind11步骤如下: 1. 安装 pybind11 1.1 pip 命令安装 pip3 install pybind11 1.2 源代码安装 安装依赖库: sudo pip install -i https://pypi.tuna.tsinghua.e…

一、Electron 环境初步搭建

新建一个文件夹,然后进行 npm init -y 进行初始化,然后我们在进行 npm i electron --save-dev , 此时我们按照官网的教程进行一个初步的搭建, 1.在 package.json 文件进行修改 {"name": "electron-ui","version…

【全开源】多功能投票小程序系统源码(ThinkPHP+FastAdmin+Uniapp)

🚀 多功能投票小程序,让决策变得更简单! 基于ThinkPHPFastAdminUniapp开发的多功能系统,支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c…

Java项目如何外发告警日志到企业微信

前言 最近领导交代了一个需求,就是有些许客户不单单满足平台告警日志外发到邮箱、短信的形式,还要以消息聊天的形式外发给企业微信。 具体操作 1、注册企业微信。 2、登录企业微信,找到应用管理,创建应用。 3、创建完之后需要记录以下图片中两个值的信息。 4、然后记录下…

vue实现大语言模型返回的数据将代码高亮显示的实现

0. 引言 最近在学习ai大模型相关的东西,就想着自己做一个类似于chatGPT的网站,做到最后的时候代码块始终是不能高亮显示,以前一直搞Java没太了解过前端vue相关的东西,经过自己查资料,自己慢慢也是研究出来了。 这个项目…

RFID模块板子JY-LD6900通用自由口协议通信说明

RFID模块板子JY-LD6900是健永科技基于RFID无线射频识别技术推出的一款低频读卡模块,体积小巧,性能优越,读卡时间小于30ms,识别速度达2m/s,配套62mm直径圆形天线,读卡距离可达20cm以上。支持双频134.2kHz、1…

分享:618学习狂欢节活动来啦——大数据培训班

618狂欢学习节 限时优惠大放送 活动时间:6月1日—6月18日

商淘云电商分账系统如何为企业降低连锁财务成本

当今激烈的市场竞争中,连锁品牌企业面临着多样化的挑战,其中财务管理尤为关键。商淘云连锁收银系统作为一款专为连锁品牌量身定制的解决方案,不仅可以帮助企业实现总部入账管控财务、银行结算规范财务的目标,还能通过分账系统优化…

什么是SIEM

SIEM 解决方案是一种企业级应用程序,可集中和自动化与网络安全相关的操作,该工具通过收集、分析和关联从组织 IT 基础设施中的各种实体聚合的网络事件来帮助应对网络威胁。 与帮助监控和评估组织物理空间中的危险的监视控制台相比,SIEM解决方…

【漏扫工具】Afrog V3.0.6一款漏洞扫描神器

简介 [Afrog]是一款高性能的漏洞扫描器,快速稳定。它支持用户自定义的 PoC,并内置了多种类型,例如 CVE、CNVD、默认密码、信息泄露、指纹识别、未经授权的访问、任意文件读取和命令执行。借助 afrog,网络安全专业人员可以快速验证…

从一道题看利用sqlite打jdbc达到RCE

前言 从今年国赛的一道java题遇到了sqlite数据库去打jdbc达到RCE的姿势,故笔者写篇文章记下 复现 反编译源代码可以看见这三个数据库 这里提供了mysql sqlite psql 但mysql和psql都不行 这里我们用sqlite去打 jdbc就可以执行load_extension() CVE-2023-32697&#…

重磅就业报告前美股涨势消减,标普暂别纪录高位,英伟达盘中闪崩近6%,欧央行降息预期“退烧”,欧元跳涨

标普纳指创盘中历史新高后转跌,道指三连涨至近两周新高;芯片股指和台积电美股跌落纪录高位,英伟达三日收创历史新高后回落;游戏驿站盘中一度暴拉50%。中概股指回落,财报后蔚来收跌6.8%。欧央行会后,欧元盘中…

美颜SDK与直播美颜插件:开发者指南与优化技巧

本篇文章,小编将详细探讨如何利用美颜SDK和直播美颜插件进行开发,以及在实际应用中优化这些工具的技巧。 一、美颜SDK简介 美颜SDK这些功能通过复杂的图像处理算法实现,SDK的存在大大简化了开发者的工作,使他们无需从零开始编写…

项目3:从0开始的RPC框架

一. 基本概念 区别于传统的增删改查型的业务项目,本项目侧重于开发框架,并且涉及架构方面的技术知识点。 1. 什么是RPC? 远程过程调用(Remote Procedure Call),是一种计算机通信协议,它允许程…

GAT1399协议分析(10)--视频定义及解析

一、官方定义 二、字段解析 VideoID 类型BasicObjectID 解析参考GAT1399协议分析(8)--ImageInfo字段详解-CSDN博客 InfoKind 采集类型

小程序自定义marker弹出框教程

需求背景 微信小程序开发,需要使用腾讯地图显示自定义marker,并且点击marker后弹出自定义的customCallout,并且customCallout的内容为用户点击marker的时候再从后台接口获取数据。 百度了一圈后发现居然没有一篇文章可以一次性完成&#xf…

SSM旅游论坛(前后分离源码+论文)

该旅游论坛是基于Spring、SpringMVC、Mybatis框架开发出来的 用户信息管理 此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息, 还进行了对用户名称的模糊查询的条件 景点信息管理 论坛类型管理…

医诊合作怎么避免减少双方损失,吸引更多的优质医疗资源下沉到基层?防漏费系统又起到什么作用?

健康领域的现代化治理要求在公共医疗卫生机构之间建立合作关系,然而我国公共医疗卫生服务领域呈现各级各类健康服务机构自由混合竞争的格局,这对公医分类分级诊疗法治秩序构成全面挑战,并成为影响转诊制度构建的重要因素.我国转诊制度的建设应以维护诊疗合作的法律秩序为前提,并…