LIUNX:系统编程动态库加载(1)

news/2024/9/22 22:40:36/

目录

操作系统角度理解

如何加载

怎么管理库

编址


操作系统角度理解

如何加载

 首先main想要运行,首先要为main创建task_struct和mm_struct,然后将main的代码和数据加载到内存,将main的代码通过页表映射到mm_struct的正文代码段,看这个程序运行是需要哪些动态库,将这些动态库加载到内存中,建立映射到共享区。

如果另一个程序也需要使用libmymath.so,直接用该程序页表建立一个该程序的共享区到libmymath.so的映射,本质libmymath.so只有一份,谁想用谁就和libmymath.so建立映射就完了。

怎么管理库

对库的管理依旧采用面相对象,现描述再组织,抽离出库的主要信息,用链表连接起来。

struct loadlib
{char *libname;void *libadress;uint64_t time;struct loadlib *next;
}

编址

一个可执行程序,不是在其加载到内存的时候他才有地址,而是在编译完成后,程序的每一行的代码就已经有属于自己的地址了。

使用size命令查看

 我们发现一个文件的代码,数据,已初始化的数据,未初始化的数据的大小已经规定好了,这说明即使程序未被加载到内存,可执行程序已经存储好初始进程地址空间的数据了!!!!

再来谈谈是如何编址的。

在liunx下程序的编址采用绝对编址--平坦模式。

我们可以查看每一行汇编代码的地址,是从0开始进行编址,

记录每个函数的起始位置,然后在这个位置之后,向后排。

记录代码区和数据区的起始,然后向后编址


http://www.ppmy.cn/news/1442185.html

相关文章

three.js vue3封装贴图循环偏移案例

以上是代码实现效果。本篇文章主要讲述vue3对代码的封装&#xff0c;以及如何让图片循环播放。 封装主要分三步&#xff1a; 1、封装实例化模块&#xff1b;2、封装渲染&#xff1b;3、偏移量操作。 具体的代码如下&#xff1a; <script setup> import * as THREE fr…

Unity打开Android文件管理器并加载文件

1、在AssetStore商店中加入免费插件 2、调用代码 3、使用UnityWebRequest加载路径数据

10 SQL进阶 -- 综合练习题 -- 10道经典SQL题目,配套数据与解答

1. 创建表结构和导入数据 1.1 新建数据库 1.2 执行建表语句 点击下方链接直接下载创建数据表脚本:http://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/SQL/create_table.sql 执行建表语句执行成功查看创建的表1.3 导入数据 点击下方链接直接下载插入数据脚本:htt…

pymilvus执行多向量搜索

pymilvus执行多向量搜索 从 Milvus 2.4 开始&#xff0c;引入了多向量支持和混合搜索框架&#xff0c;单个collection可以支持10个向量字段。不同的向量字段可以表示不同的方面、不同的embedding模型甚至表征同一实体的不同数据模态。该功能在综合搜索场景中特别有用&#xff…

ElasticSearch自动补全

一、拼音分词器&#xff1a; 当用户在搜索框输入字符时&#xff0c;我们应该提示出与该字符有关的搜索项&#xff0c;如图&#xff1a; 这种根据用户输入的字母&#xff0c;提示完整词条的功能&#xff0c;就是自动补全了。 GET /_analyze {"text":"我爱螺蛳粉…

Java try catch 应该在 for 循环里面还是外面?(面试)

时间上&#xff0c; 其实算是无差别。内存上&#xff0c; 如果没出异常&#xff0c;其实也是无差别。 但是如果出现了异常&#xff0c; 那就要注意了。 一、try catch 在 for 循环外面 public static void tryOutside() { try { for (int count 1; count < 5; count) …

kotlin 编写一个简单的天气预报app (七)使用material design

一、优化思路 对之前的天气预报的app进行了优化&#xff0c;原先的天气预报程序逻辑是这样的。 使用text和button组合了一个输入城市&#xff0c;并请求openweathermap对应数据&#xff0c;并显示的功能。 但是搜索城市的时候&#xff0c;可能会有错误&#xff0c;比如大小写…

代码随想录算法训练营第三十七天| LeetCode738.单调递增的数字

LeetCode 738 单调递增的数字 题目链接&#xff1a;738. 单调递增的数字 - 力扣&#xff08;LeetCode&#xff09; 【解题思路】 需要采用从后往前的遍历 如果发现该数字的前一位比后一位大&#xff0c;那么前一位就做-1处理&#xff0c;后一位变为9 注意&#xff1a;千万不…