【Linux】對共享庫加載問題的深入理解——基本原理概述

原理概述

【linux】詳解——庫-CSDN博客

共享庫被加載后,系統會為該共享庫創建一個結構,這個結構體中的字段描述了庫的各種屬性。在內存中可能會加載很多庫,每一個庫都用一個結構體描述。把這些結構體用一些數據結構管理起來,系統對庫的管理就轉化成了對數據的管理

系統對加載到內存的共享庫的信息是很清楚的

進程地址空間示意圖

【Linux】進程地址空間-CSDN博客

每個進程都會有自己的地址空間,地址空間中的共享區用來映射共享庫。

CPU在代碼區執行數據時需要用到庫中的方法會根據編譯時就給定的地址跳轉到共享區,共享區的虛擬地址通過頁表的映射找到物理內存中相應的數據,然后加載到CPU運算。

如果虛擬地址在頁表中沒有與對應的物理地址建立映射關系就會發生缺頁中斷,系統會把磁盤中的對應的數據加載到內存,再讓虛擬地址和物理地址建立映射關系,然后這部分數據被CPU調度執行。

多個進程的頁表可能會映射同一個庫,即共享庫可以被多個進程使用

當一個進程要對庫中定義的全局變量做寫入時,系統會檢查檢查該全局變量的引用計數,若庫是被多個進程共享的,就會發生寫時拷貝。一個進程對共享庫的任何操作都不會影響其他進程。

線性地址虛擬地址邏輯地址進程地址空間,其實是一個概念。采用的是全0到全1的編址,用線性地址來描述這樣的編址方式是一種很形象的叫法。

虛擬地址和進程地址空間是進程層面的叫法,而邏輯地址是可執行程序中的地址分配方式。

編譯器給代碼的編址方式是虛擬地址,CPU執行拿到的地址也是虛擬地址。在CPU中,內置了指令集,能讓CPU完成一些簡單的動作。

比如函數跳轉,拿著該函數的地址跳轉到相應的地址空間,把相應的地址進行頁表映射,拿到物理內存中相應的數據加載到CPU中調度執行。

也就是說從編譯器為代碼分配地址到CPU調度執行的地址都是虛擬地址,如果想拿到具體的數據只需通過虛擬地址在頁表中找到對應的物理地址從而拿到相應的數據。

如果虛擬地址并沒有在頁表中與物理地址建立映射關系,即相應的數據并沒有被加載到內存中,就會發生缺頁中斷,數據會從磁盤加載到內存,然后對應的虛擬地址與物理地址建立映射關系。

動態庫在編譯時會帶上-fPIC選項,該選項表示與位置無關碼

在編譯庫代碼時,不會按邏輯地址的方式分配。

而是采用偏移量的方式,這樣任意位置的代碼數據可以映射到共享區中的任意位置,只需要知道庫的開始位置被加載到哪里,只需用開始位置的地址加偏移量即可拿到該指令的虛擬地址,然后就是與頁表映射的一系列操作了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36489.shtml
英文地址,請注明出處:http://en.pswp.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…

遠程服務器配置(堡壘機samba/ssh等)

分配了新的服務器后,要下載代碼首先要配置ssh。有以下兩種方式: 拷貝原本服務器的在本地的重新生成ssh,再跟服務器密鑰配對(如未備份.gitconfig,還需重新配置git賬號郵箱。) ssh配置 如果是拷貝過來的.ss…

【win11】Mouse without Borders安裝問題以管理員權限安裝msi文件

【win11】Mouse without Borders安裝問題&以管理員權限安裝msi文件 Mouse without Borders安裝問題解決&以管理員權限安裝msi文件啟動Windows Installer服務以管理員權限安裝msi文件 參考文獻 Mouse without Borders安裝問題 在win11下我雙擊MouseWithoutBorders2.2.1…

nodejs使用mysql模塊自動斷開

背景 第二天早上來的時候,發現接口返回異常Cannot enqueue Query after fatal error 從日志看上去,接口是正常運行的,搜索一下之后發現是數據庫的問題,連接斷開了 原因 MySQL中有一個名叫wait_timeout的變量,表示操…

由監官要求下架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…

java springboot過濾器

在Spring Boot應用中添加自定義過濾器,可以通過實現Filter接口或繼承OncePerRequestFilter類來創建過濾器,并使用FilterRegistrationBean將其注冊到Spring容器中。 以下是一個簡單的示例: 1. 創建過濾器類 首先,創建一個實現Fil…

C++基礎語法:類構造函數

前言 "打牢基礎,萬事不愁" .C的基礎語法的學習 引入 類是實現面向對象思想的主要方法.前面提到:類是函數的變種,類可以通過調用靜態方法或者成員函數來實現邏輯.多數情況下使用成員函數.構造函數是生成類對象成員的必須條件,對此做一些構造函數的歸納 構造函數的目…

【日志消息類的編寫】

日志消息類編寫 由于上篇的代碼比較簡單,今天就多寫兩段代碼順便把日志消息類編寫完成。 這個類的實現就是:什么時間,哪個線程,哪個文件的哪一行,發生了什么等級的日志,日志機器名字是什么,日…

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…