【KPWN】一种相对新的 Kernel Elastic Object 结构体 anon_vma_name

【KPWN】一种相对新的 Kernel Elastic Object 结构体 anon_vma_name

💡 原文中文,约5700字,阅读约需14分钟。
📝

内容提要

文章讨论了一种堆喷结构体的实现,涉及内存分配与管理,使用 `prctl` 系统调用设置匿名虚拟内存名称,并分析相关的内存分配函数和结构体。指出该结构体在国内研究较少,小尺寸内存分配方式较为实用。

🎯

关键要点

  • 文章讨论了一种堆喷结构体的实现,涉及内存分配与管理。
  • 使用 prctl 系统调用设置匿名虚拟内存名称。
  • 分析相关的内存分配函数和结构体。
  • 指出该结构体在国内研究较少,小尺寸内存分配方式较为实用。
  • 堆喷结构体可以喷 kmalloc-8 和 kmalloc-96,每次系统调用仅分配一个对象。
  • 小尺寸内存分配方式在国内应用较少,但实用性较强。
  • 通过 mmap 函数分配内存,并使用 prctl 设置内存名称。
  • 内存名称的设置需要保证名称可打印且不包含无效字符。
  • 动态计算结构体大小,使用 kmalloc 进行内存分配。
  • 引用计数机制用于管理内存名称的生命周期。

延伸问答

什么是 anon_vma_name 结构体?

anon_vma_name 结构体用于管理匿名虚拟内存名称,包含引用计数机制以管理其生命周期。

如何使用 prctl 系统调用设置匿名虚拟内存名称?

使用 prctl 调用时,传入 PR_SET_VMA 和 PR_SET_VMA_ANON_NAME 选项,以及内存地址、大小和名称。

该结构体在国内的研究现状如何?

该结构体在国内的研究较少,但小尺寸内存分配方式被认为实用性较强。

如何动态计算 anon_vma_name 结构体的大小?

通过计算名称的长度加一(用于终止字符)和结构体的基本大小来动态计算。

在内存分配中使用了哪些函数?

使用了 mmap 函数进行内存分配,并通过 kmalloc 分配 anon_vma_name 结构体的内存。

设置匿名虚拟内存名称时需要注意什么?

名称必须可打印且不包含无效字符,且长度不得超过 80 字节。

➡️

继续阅读