当前位置: 首页 > article >正文

linux kernel 6.x 用户态地址空间探究

最近做个项目需要研究用户态虚拟地址划分情况,找到多个app的共有未使用区间。偶然发现6.1.49和6.8的kernel用户态虚拟地址划分似乎有些不一样。下面使用数据进行分析。

大家都知道linux应用空间的地址划分是:

  • stack高地址开始,向下生长。
  • mmap区域/库加载区域/匿名映射区,介于stack和heap之间,中间隔多少?文档说是随机。
  • heap区,向上生长。
  • 代码段,BSS...

写了个测试程序然后每个程序运行100次来看看这些区域的起始地址在哪里,先是6.1.49kernel,文件系统用的是ubuntu22:

如上图所示:

stack: 起始地址最稳定,基本一条直线,同时也是最高地址。

mmap:地址在stack之下,但是不同程序的起始地址会有波动。

heap:在最下边,起始地址同样有波动。

地址空间波动:

mmap和heap的波动在1TB,mmap起始到heap起始有41TB的空间,中间有很大的冗余。

接下来看下6.8kernel,文件系统同样是ubuntu22:

明显可以看到在最新的6.8kernel中,mmap和heap区的起始地址波动变大:

波动均在16TB,并且是类似正弦曲线的波动。这也导致了heap和mmap中间的空白冗余变小。

总结:6.8的mmap和heap起始地址波动变大,所以如果要对多个app找到相同的未使用虚拟地址区间,6.8要比6.1.49更难,并且要分配不同的策略。


http://www.kler.cn/a/301043.html

相关文章:

  • 第8章硬件维护-8.2 可维护性和可靠性验收
  • 麒麟时间同步搭建chrony服务器
  • Git 分⽀规范 Git Flow 模型
  • 【嵌入式】关于push老仓库到新仓库的方法
  • 基于yolov8、yolov5的行人检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • 表格的选择弹窗,选中后返显到表格中
  • ICETEK-DM6437-AICOM—— DMA直接存储器访问设计
  • JD18年秋招笔试疯狂数列python解答
  • 使用Docker快速启动Nacos集群
  • RepLKNet架构详解
  • 在 Vue 2 中使用 Axios 发起 POST 和 GET 请求
  • C#学习 深入理解委托、匿名方法、Lamda表达式、Linq;
  • 【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)
  • 点亮第一盏LED灯 2),stm32CubeMX在线导入F103C8T6芯片包
  • Three 渲染器(二)
  • 如何将Windows风格的剪切和粘贴添加到Mac访达中
  • springboot配置多数据源
  • MySQL record 03 part
  • 第67期 | GPTSecurity周报
  • 简单的 Fortran 程序示例
  • C语言蓝桥杯:语言基础
  • c/c++面试100道
  • 工厂安灯系统在设备管理中的重要性
  • 怎么利用XML发送物流快递通知短信
  • 引领智能家居新风尚,WTN6040F门铃解决方案——让家的呼唤更动听
  • 公开数据库下载2-药敏性、综合类(TCGA、COSMIC、UCSC、GATK、cBioPortal)