详述进程的地址空间

news2024/10/5 11:46:02
  • 进程的地址空间

    • 在这里插入图片描述

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

      • 代码 (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.coloradmin.cn/o/1676678.html

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

相关文章

Arduino-ILI9341驱动-SPI接口TFTLCD实现触摸功能系列之触控开关二

Arduino-ILI9341驱动-SPI接口TFTLCD实现触摸功能系列之触控开关二 1.概述 这篇文章在触摸屏上绘制一个开关,通过点击开关实现控制灯的开关功能。 2.硬件 硬件连接参考第一篇文章介绍 Arduino-ILI9341驱动-SPI接口TFTLCD实现触摸功能系列之获取触控坐标一 3.实现…

使用Caché管理工具

Cach通过一个web工具来对其进行系统管理和完成管理任务,该方法的一个好处是不必将Cach安装到用于管理的系统上。目前,通过网络远程管理和控制对站点的访问,这些都比较容易。因为数据及其格式信息都直接来自被管理的系统,因此,这也可以最小化跨版本的兼容问题。 本文将描述…

【知识碎片】2024_05_14

本篇记录了两道关于位运算的选择题,和一道有点思维的代码题。 C语言碎片知识 求函数返回值,传入 -1 ,则在64位机器上函数返回( ) int func(int x) {int count 0;while (x){count;x x&(x - 1);//与运算} return c…

Java医院绩效核算系统与his对接所需数据有哪些?java+springboot+MySQL医院绩效管理系统-构建智慧医疗生态

Java医院绩效核算系统与his对接所需数据有哪些?javaspringbootMySQL医院绩效管理系统-构建智慧医疗生态 医院绩效核算系统与his对接所需数据 1、诊察工作量绩效:信息系统-财务权限-统计报表-报表浏览-财务常用报表-门诊医生工作量报表 2、判读及操作工…

微信小程序 - - - - - 使用TDesign库(微信小程序UI库)

使用TDesign库 1. 初始化依赖2. 安装TDesgin3. npm构建3. 修改 app.json 1. 初始化依赖 npm init -y2. 安装TDesgin yarn add tdesign-miniprogram -S --productionor npm install tdesign-miniprogram -S --production3. npm构建 3. 修改 app.json 将 app.json 中的 “styl…

CTF如何学习?

CTF如何学习?打CTF有什么用 CTF本身有几个常见的领域 MISC WEB [逆向 密码学](https://www.zhihu.com/search?q逆向 密码学&search_sourceEntity&hybrid_search_sourceEntity&hybrid_search_extra{“sourceType”%3A"answer"%2C"sourc…

ubuntu 22.04 安装 RTX 4090 显卡驱动 GPU Driver(PyTorch准备)

文章目录 1. 参考文章2. 检查GPU是Nvidia3. 卸载已有驱动3.1. 命令删除3.2. 老驱动包 4. 官网下载驱动5. 运行5.1. 远程安装关闭交互界面5.2. 运行5.3. 打开交互界面 6. 检测与后续安装 1. 参考文章 https://blog.csdn.net/JineD/article/details/129432308 2. 检查GPU是Nvid…

【MySQL】Mysql——安装指南(Linux)

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以; Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 3. 上传MySQL安装包 4. 创建目录,并解压 mkdir mysqltar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar -C mysql5. 安装mysql的安装包 …

CAPL入门之使用CAPL记录测试Logging

0 前言 以往测试的log都是直接从trace导出,但是最近发现trace中能导出的数据是有限的,如果测试的时间过长,新的数据就会把之前的数据全部覆盖,并且对于长时间的测试,直接导出trace的内容也会造成查找效率低下的问题。因…

iOS 创建pch文件

1.参考链接(xcode8添加方法,之前的跟这个差不多): 参考链接 2.自我总结: (1)创建pch文件: 注意点:1)注意选中所有的targets(看图明义) 2&…

关于链表相关的OJ题

✨✨✨专栏:数据结构 🧑‍🎓个人主页:SWsunlight 一、 OJ题 返回倒数第K个节点: 1、遍历链表一遍:用2个指针,phead和ptail先让ptail先走k步,然后让2个指针一起走,快的走到NULL即…

计算机发展史故事【13】

微电脑先锋 与第一台电子计算机埃历阿克的命运相似,1974 年面世的“牛郎星”能否作为世界上第一台微电脑被载入史册,人们似乎也存在着分歧。 拥有微处理器发明权的英特尔公司,难道自己不会组装微电脑,非得罗伯茨来越俎代庖吗&…

从零开始:C++ String类的模拟实现

文章目录 引言1.类的基本结构2.构造函数和析构函数3.基本成员函数总结 引言 在C编程中,字符串操作是非常常见且重要的任务。标准库中的std::string类提供了丰富且强大的功能,使得字符串处理变得相对简单。然而,对于学习C的开发者来说&#x…

【考研数学】强化阶段,张宇《1000题》正确率达到多少算合格?

首次正确率在60%以上就算是合格! 张宇老师的1000题真挺难的,所以如果第一次做正确率不高,不要太焦虑,1000题不管是难度,综合度还是计算量,都比其他的题集高一截。 大家真实的做题情况下,如果正…

前端工程化 - 快速通关 - ES6

目录 ES6 1.1 let 1.2 const 1.3解构 1.4链判断 1.5参数默认值 1.6箭头函数 1.7模板字符串 1.8Promise 1.9Async 函数 1.10模块化 ES6 ●ECMAScript(ES) 是规范、 JavaScript 是 ES 的实现 ●ES6 的第一个版本 在 2015 年 6 月发布&#xff0c…

【C语言习题】12.扫雷游戏

文章目录 1.扫雷游戏分析和设计1.1 扫雷游戏的功能说明1.2游戏界面:1.3游戏的分析和设计1.2.1 数据结构的分析1.2.2 ⽂件结构设计 2.扫雷游戏的代码实现3.代码讲解 1.扫雷游戏分析和设计 1.1 扫雷游戏的功能说明 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现…

机器学习案例:加州房产价格(四)

参考链接:https://hands1ml.apachecn.org/2/#_12 数据探索和可视化、发现规律 通过之前的工作,你只是快速查看了数据,对要处理的数据有了整体了解,现在的目标是更深的探索数据。 首先,保证你将测试集放在了一旁&…

特征模态分解(FMD):一种小众而又新颖的分解方法

​ 声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 今天为大家介绍一个小众而又新颖的信号分…

HyperLogLog的使用做UV统计

使用Jedis连接Redis并操作HyperLogLog import redis.clients.jedis.Jedis;public class RedisHyperLogLogExample {public static void main(String[] args) {// 连接到本地的Redis服务Jedis jedis new Jedis("localhost", 6379);String hyperLogLogKey "hll…

智慧安防系统:构建更安全的社区环境

随着科技的不断进步,人们的生活质量得到了显著提高。然而,与此同时,社会治安问题也日益凸显。为了维护社会的和谐稳定,提高人们的生活安全感,智慧安防系统应运而生。本文将为您详细介绍智慧安防系统的项目背景、需求分…