详述进程的地址空间

  • 进程的地址空间

    • 在这里插入图片描述

    • 合法的地址 (可读或可写)

      • 代码 (main, %rip 会从此处取出待执行的指令),只读
      • 数据 (static int x),读写
      • 堆栈 (int y),读写
      • 运行时分配的内存 (???),读写
      • 动态链接库 (???)
    • 非法的地址

      • NULL,导致 segmentation fault
    • 查看进程的地址空间

      • pmap (1) - report memory of a process
        • Claim: pmap 是通过访问 procfs (/proc/) 实现的
      • 进程的地址空间:若干连续的 “段”
      • “段” 的内存可以访问
      • 不在段内/违反权限的内存访问 触发 SIGSEGV
        • gdb 可以 “越权访问”,但不能访问 “不存在” 的地址
    • /proc/[pid]/maps (man 5 proc)

      • 打开a.out的进程文件显示(动态链接)
        • 表头:地址 (范围) ,权限 (rwxsp),对应的文件: offset, dev, inode, pathname

        • 在这里插入图片描述

        • libc后的空白部分,是未被初始化的变量

    • 系统调用的实现

      • “执行系统调用时,进程陷入内核态执行”——不,不是的。
      • 系统调用就是一组接口的约定,不一定执行中断指令。
      • 操作系统为每个进程维护了一个vdso和vvar内存空间,使得所有进程都有一段内存映射到了vdso和vvar上。
      • 用共享内存和内核通信!
        • 内核线程在 spinning 等待系统调用的到来
        • 收到系统调用请求后立即开始执行
        • 进程 spin 等待系统调用完成
        • 如果系统调用很多,可以打包处理
      • 如果未从vdso找到,就得执行中断,进入一般的系统调用的步骤了
  • 进程的地址空间管理

    • Execve 之后……

      • 进程只有少量内存映射
        • 静态链接:代码、数据、堆栈、堆区
        • 动态链接:代码、数据、堆栈、堆区、INTERP (ld.so)、后边通过系统调用在动态加载其他的。
        • ld.so是动态链接加载器,lib.so是动态链接库,INTERP是ELF (Executable and Linkable Format) 格式的可执行文件的一个特殊段,用于指定动态链接器(dynamic linker/loader)的路径。
    • 进程的地址空间

      • 进程的地址空间 = 内存里若干连续的 “段”

        • 每一段是可访问 (读/写/执行) 的内存
          • 可能映射到某个文件和/或在进程间共享
      • 管理进程地址空间的系统调用

      • // 映射
        void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
        int munmap(void *addr, size_t length);// 修改映射权限
        int mprotect(void *addr, size_t length, int prot);
        //即:在状态上增加/删除/修改一段可访问的内存
        
  • 地址空间的隔离

    • 每个 *ptr 都只能访问本进程 (状态机) 的内存
      • 除非 mmap 显示指定、映射共享文件或共享内存多线程
      • 实现了操作系统最重要的功能:进程之间的隔离
    • 但是可以通过修改/proc/[pid]/mem中的内容,对该进程虚拟内存的直接访问
    • 访问条件:
      • 为了读取或写入 /proc/[pid]/mem,以下条件必须满足:
        1. 进程拥有权:您必须是该进程的拥有者或者是超级用户。
        2. 进程状态:该进程必须处于非运行状态(例如,通过发送 SIGSTOP 信号暂停进程)。

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

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

相关文章

【微命令】git config如何配置全局的用户和邮箱?(--global user.name、user.email;git config --help)

虽然经常用,也经常忘记,特此记录。 命令 git config --global user.name "myname" git config --global user.email test163.com另外一种方式 help git config --help |grep email | grep name直接help查看

Git系列:git log 掌握版本控制的精髓

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【leetcode面试经典150题】-27. 移除元素

88.合并两个有序数组 1 题目介绍1 个人解题思路1.1 解题代码1.2 思路解析 2、分析官方题解2.1 单侧双指针2.2 双侧双指针 1 题目介绍 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外…

Echarts结课之小杨总结版

Echarts结课之小杨总结版 前言基础回顾框架sale框架代码: user框架基础代码: inventory框架基础代码: total框架基础代码: 基础设置1.标题(Title)2.图例(Legend)实现 3.工具提示(Tooltip)实现 4.X轴(X Axis) 和 Y轴(Y Axis)5.数据…

「Qt Widget中文示例指南」如何实现一个快捷编辑器(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 快捷编辑器示例展示…

Leetcode 第 129 场双周赛题解

Leetcode 第 129 场双周赛题解 Leetcode 第 129 场双周赛题解题目1:3127. 构造相同颜色的正方形思路代码复杂度分析 题目2:3128. 直角三角形思路代码复杂度分析 题目3:3129. 找出所有稳定的二进制数组 I思路代码复杂度分析 题目4:…

电子邮箱是什么?怎么申请一个电子邮箱?

电子邮箱是我们沟通的工具,细分为免费版电子邮箱和付费版电子邮箱。怎么申请一个属于自己的电子邮箱?今天小编就分享一下电子邮箱注册教程,手把手教您注册一个电子邮箱。 一、电子邮箱的定义 电子邮箱,简称邮箱,是一…

BGP路由优选

1.BGP路由优选规则 上述规则依序排列,BGP进行路由优选时,从第一条规则开始执行,如果根据第一条规则无法作出判断,例如路由的Preferred-Value属性值相同,则继续执行下一条规则,如果根据当前的规则&#xff0…

如何快速打开多个网页?

在平常的工作当中, 如果每天都需固定打开几个网站,可以通过创建一个批处理,一键打开需要的所有网站。 使用方法: 在桌面新建一个txt文本,按照以下格式输入代码,并将需要打开网站的地址输入进去。 ​ ec…

JavaScript异步编程——11-异常处理方案【万字长文,感谢支持】

异常处理方案 在JS开发中,处理异常包括两步:先抛出异常,然后捕获异常。 为什么要做异常处理 异常处理非常重要,至少有以下几个原因: 防止程序报错甚至停止运行:当代码执行过程中发生错误或异常时&#x…

虚拟化技术 在vCenter Server创建数中心、添加主机

一、实验内容 1.安装Flash 2.在vCenter Server创建数中心、添加主机 二、实验主要仪器设备及器材 1.安装有64位Windows操作系统的台式电脑或笔记本电脑,建议4C8G或以上配置 2.在Windows Server 2008 R2已安装vCenter Server 3.Adobe Flash Player 12.0.0.70.e…

算法-卡尔曼滤波之卡尔曼滤波的第一个方程:状态更新方程

通过一个例子来引出卡尔曼滤波的状态更新方程; 这里系统状态是金条的重量; 为了估计系统的状态,我们可以多次测量金条的重量,然后求平均值; 其中估计值是所有测量值的平均值; 由于我们使用的是静态模型&am…

第十六节:图 (20节)

一 图的概念 1)由点的集合和边的集合构成 2)虽然存在有向图和无向图的概念,但实际上都可以用有向图来表达 3)边上可能带有权值 二 图结构的表达 1)邻接表法 2)邻接矩阵法 3)除此之外还有其他众多…

【完整过程】Windows下记录PadleOCR训练自己的ocr模型

一、前期准备 1、代码 参考的博主使用的是2.6版本的 博主的paddleocr代码 下面这个是官方的,可能已经更新了(我用的是官网当前最新版) paddleocr的源代码 注意:最好把上面两个代码都下载下来,后面都会用到 参考博…

先有JVM还是先有垃圾回收器?

是先有垃圾回收器再有JVM呢,还是先有JVM再有垃圾回收器呢?或者是先有垃圾回收再有JVM呢?历史上还真是垃圾回收更早面世,垃圾回收最早起源于1960年诞生的LISP语言,Java只是支持垃圾回收的其中一种。下面我们就来刨析刨析…

免费思维13招之十一:利润型思维

免费思维13招之十一:利润型思维 免费思维的另一大战略思维——利润型思维。 什么是利润型思维呢?就是用后期的利润来支付现在的成本。也就是“花未来的钱,办现在的事”。 我们在销售自己的产品时候,最容易犯的一个件事,就是降价,我们先来看一个案例: 前几年,有一个卖…

3dmax材质库导入方法?3dmax云渲染速度体验

3ds Max 材质库包含多种素材,如金属、木材、布料和石材等,但用户在导入材质时常遇到问题。本文将介绍如何在3ds Max中成功导入材质,并探讨使用云渲染服务来加速渲染过程,提高项目效率。 一、3dmax材质库导入教程 自建材质导入方法…

【js】获取媒体流实现拍照功能,摄像头切换

<script setup>import {onMounted,reactive,ref} from vueconst videoConstraints reactive({width: 500,height: 300});let picArr reactive([])let videoNode ref(null)let show ref(true)let stream reactive({})onMounted(async () > {// 获取视频流&#xf…

RuoYi-Vue-Plus (Logback 和 logback-plus.xml 、p6spy)

项目后本地日志 一、logback依赖 打开最外层的 pom.xml,查看 SpringBoot的依赖配置。 <dependencyManagement><dependencies><!-- SpringBoot的依赖配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>s…

position:fixed无法固定到父盒子上面的解决方案

目录 问题如图所示&#xff1a; 下面是错误的代码&#xff1a; 解决方案1&#xff1a; 使用fixed固定定位固定到父元素&#xff1a; 解决方案2&#xff1a; 推荐使用的其他方案&#xff08;粘性定位&#xff09;&#xff1a; 什么是粘性定位&#xff1a; 粘性定位的使用…