详述进程的地址空间

  • 进程的地址空间

    • 在这里插入图片描述

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

      • 代码 (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.hqwc.cn/news/701682.html

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

相关文章

串联所有单词的子串 ---- 滑动窗口

题目链接 题目: 分析: 我们上次做的题目, 是找到所有字符的异位词, 和这道题有些类似, 使用记录有效字符的个数找到子字符, 此题无非是把字符变成了字符串题目回顾 有一下几方面不同, 我们以示例1为例: 1. 哈希表 上次我们使用的是哈希数组, 因为数组的下标可以是字符, 现…

织梦dedecms企业网站模板安装教程

很多新手在拿到织梦模板后不知道如何安装,所以,云部落(Yunbuluo.Net)资源网专门整理了一份图文版织梦模板通用安装教程,希望对大家有所帮助。 第一步: 将域名解析绑定好之后,上传下载的模板至您的WEB根目录中&#xf…

YOLOv5独家改进:backbone改进 | 微软新作StarNet:超强轻量级Backbone | CVPR 2024

💡💡💡创新点:star operation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力,这就是StarNet的核心创新,在紧凑的网络结构和较低的能耗下展示了令人印象深刻的性能和低延迟 💡💡💡如何跟YOLOv5结合:替代YOLOv5的backbone 收录 YOL…

C51 单片机编程模板及编码规范

文章目录 一、C51 单片机模板创建1. 新建工程及选型2. 创建主程序文件3. 创建主程序的头文件4. 编译配置5. 其他 二、C51 的编码规范 在查阅了很多关于 C51 单片机的程序后,个人感觉目前网上有关 C51 单片机程序的质量参差不齐,很多程序的代码风格及其糟…

YOLOv9改进策略 | 低照度图像篇 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)

一、本文介绍 本文给大家带来的2024.3月份最新改进机制,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络,CPA-Enhancer通过引入链式思考提示机制&am…

详解xlswriter 操作Excel的高级应用conditional_format

在文章详解xlsxwriter 操作Excel的常用API-CSDN博客 我们介绍了xlswriter 基础api的使用情况,在实际工作中我们经常会遇到下面的需求,cell满足某某条件时,进行对应的格式化处理。这时候我们可以使用conditional_format的函数,他允…

C语言----斐波那契数列(附源代码)

各位看官们好,当我写了上一篇博客杨辉三角后,有一些看官叫我讲一下斐波那契数列。对于这个大家应该是有了解的。最简单的规律就是f(n)f(n-2)f(n-1)。就是当前是前两项之和,然后下标1和0都是1.从第三项开始计算的。那么我们知道规律&#xff0…

echarts map地图添加背景图

给map地图添加了一个阴影3d的效果&#xff0c;添加一张背景图&#xff0c;给人感觉有3d的效果 具体配置如下&#xff1a; html代码模块&#xff1a; <div class"echart_img" style"position: fixed; visibility: hidden;"></div><div id&q…

【正则表达式】1、元字符的认识与分类

1、元字符的概念 正则表达式的常见功能&#xff0c;分别是校验数据的有效性、查找符合要求的文本以及对文本进行切割和替换等操作。 我想你一定在办公软件&#xff0c;比如 Word、Excel 中用过这个功能。你可以使用查找功能快速定位关注的内容&#xff0c;然后使用替换&#xf…

【谷粒商城】04.快速开发

1.克隆代码 https://gitee.com/renrenio DELLLJL MINGW64 ~/Desktop $ git clone https://gitee.com/renrenio/renren-fast.git Cloning into renren-fast... remote: Enumerating objects: 1965, done. remote: Counting objects: 100% (1965/1965), done. remote: Compress…

查看Linux系统是Ubuntu还是CentOS

要查看Linux系统是Ubuntu还是CentOS&#xff0c;可以通过多种方式进行确认&#xff1a; 查看/etc/os-release文件&#xff1a; 在终端中执行以下命令&#xff1a; cat /etc/os-release 如果输出中包含"IDubuntu"&#xff0c;则表示系统是Ubuntu&#xff1b;如果输出中…

基于EKF扩展卡尔曼滤波的一阶环形倒立摆控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于EKF扩展卡尔曼滤波的一阶环形倒立摆控制系统simulink建模与仿真。基于扩展卡尔曼滤波&#xff08;Extended Kalman Filter, EKF&#xff09;的一阶环形倒立摆控制系统&…