首页/新闻资讯/正文详情

linux kernel struct 之 execmem_info

发布时间:2026/9/27 1:23:07 来源:云帆数科 栏目:资讯中心
linux kernel struct 之 execmem_info
struct execmem_info是 Linux 内核execmem子系统中的核心架构描述结构体用于告诉通用分配器哪些虚拟地址范围可以分配可执行内存以及用什么页权限和对齐要求。结构体定义x86 struct execmem_info { struct execmem_range ranges[EXECMEM_TYPE_MAX]; };它本质上是一个按分配类型索引的数组每种类型对应一个struct execmem_range。struct execmem_range的关键字段从 x86 的补丁实现来看每个 range 包含start/end可分配地址范围的起止虚拟地址。x86 上默认使用MODULES_VADDR 随机偏移到MODULES_END。pgprot页保护属性如PAGE_KERNEL可读写后续再改为 ROX或PAGE_KERNEL_ROX。alignment地址对齐要求x86 模块区使用MODULE_ALIGN。flags标志位如EXECMEM_KASAN_SHADOW需要同步 KASAN 影子内存。fallback_start/fallback_end备用范围当主范围分配失败时使用PowerPC 等架构使用。设计意图统一可执行内存分配execmem子系统的引入是为了将可执行内存分配从模块加载器中解耦。在此之前BPF JIT、kprobes、ftrace 等子系统都依赖module_alloc()来分配可执行内存即使它们不一定需要CONFIG_MODULES。struct execmem_info让每个架构可以在一个集中的地方定义不同子系统模块、BPF、kprobes、ftrace各自使用哪些地址范围。每种类型用什么页权限如 BPF 可能需要 RWXkprobes 只需要 ROX。各自的地址对齐要求。与execmem_arch_setup()的关系execmem_arch_setup()的工作就是填充并返回这个结构体。x86 的实现在arch/x86/kernel/module.c中它根据kaslr_enabled()计算随机偏移然后初始化execmem_info.ranges[EXECMEM_DEFAULT]。如果架构不实现execmem_arch_setup()返回NULL通用的execmem_init()会使用一个默认配置其地址范围是VMALLOC_START到VMALLOC_END权限为PAGE_KERNEL_EXEC。与内存管理的关系struct execmem_info与内存管理的关系可以概括为它是内存管理子系统在“可执行内存”这一特殊领域的配置接口。关系体现在四个层面1. 定义虚拟地址空间的使用规则struct execmem_info中的start和end字段直接划定了内核虚拟地址空间中哪一段可以用于分配可执行代码。这本质上是内存管理中的地址空间布局规划——在 x86 上这段范围就是MODULES_VADDR到MODULES_END之间的模块区域。2. 提供页表映射的权限属性pgprot字段如PAGE_KERNEL、PAGE_KERNEL_ROX会直接用于建立页表映射。execmem分配器在拿到内存后需要通过vmap等机制将其映射到内核虚拟地址空间并设置正确的页表权限。这完全依赖于内存管理的页表操作。3. 触发 KASAN 影子内存同步当flags中包含EXECMEM_KASAN_SHADOW时分配器需要额外考虑 KASAN 影子内存的映射。可执行内存被分配后其影子内存也需要同步更新以确保 KASAN 不会误报。这直接涉及内存管理中的影子内存机制。4. 决定物理内存的映射方式alignment字段如MODULE_ALIGN影响物理内存的分配和对齐。分配器在获取物理页后需要按照这个对齐要求将其映射到虚拟地址范围。这涉及内存管理中的物理页分配伙伴系统和虚拟地址映射的协同。为什么单独抽象传统上可执行内存的分配如内核模块加载是耦合在模块加载器中的。但 BPF JIT、ftrace、kprobes 等子系统也需要分配可执行内存却不一定依赖CONFIG_MODULES。execmem子系统的设计目标就是将可执行内存的分配从模块加载器中解耦。而struct execmem_info就是架构层面对这个分配器的“配置入口”——它告诉内存管理子系统这块地址空间可以用来放可执行代码请按这个权限和对齐要求来管理它。所以它不是“与内存管理有关系”而是内存管理在可执行代码领域的专门延伸。

相关推荐

2026硬件工程师面试核心考点:ADC采样、EMC整改与系统调试实战
2026硬件工程师面试核心考点:ADC采样、EMC整改与系统调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 1:23:07

Ars Contexta三大预设深度对比:Research、Personal、Experimental哪个适合你
Ars Contexta三大预设深度对比:Research、Personal、Experimental哪个适合你

Ars Contexta三大预设深度对比:Research、Personal、Experimental哪个适合你 【免费下载链接】arscontexta Claude Code plugin that generates individualized knowledge systems from conversation. You describe how you think and work, have a conversation an… · 2026/9/27 1:23:07

嵌入式偶发故障排查三把硬尺子:换机、录屏、对照
嵌入式偶发故障排查三把硬尺子:换机、录屏、对照

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 1:23:07

3个技巧搞定wordpress笑话站主题,新手选哪家好
3个技巧搞定wordpress笑话站主题,新手选哪家好

3个技巧搞定wordpress笑话站主题,新手选哪家好 不会写代码想做个站?别慌,这行老手教你选对wordpress笑话站主题。很多人卡在“哪家好”这一步,其实核心是看模板是否适配你的内容结构。下面直接上干货,按项目流程拆给你看。… · 2026/9/27 2:13:52

VSCode+ESP8266 RTOS_SDK环境搭建:编译烧录全攻略
VSCode+ESP8266 RTOS_SDK环境搭建:编译烧录全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 2:13:52

嵌入式烧录版本管理:从芯片启动失效到全链路可追溯
嵌入式烧录版本管理:从芯片启动失效到全链路可追溯

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 2:13:46

3步搞定征婚网站建设:拒绝拖延,性能优化实战指南
3步搞定征婚网站建设:拒绝拖延,性能优化实战指南

3步搞定征婚网站建设:拒绝拖延,性能优化实战指南 改个需求建站公司拖一周,这种憋屈事儿你是不是也遇到过?别骂了,今天直接给你一套 征婚网站建设… · 2026/9/27 2:13:46

CODESYS项目移植库缺失怎么办?三招搞定库报错与版本不兼容
CODESYS项目移植库缺失怎么办?三招搞定库报错与版本不兼容

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 2:13:40

网站被黑别慌:网络推广方案xiala11实战案例复盘
网站被黑别慌:网络推广方案xiala11实战案例复盘

网站被黑别慌:网络推广方案xiala11实战案例复盘 凌晨三点,手机突然震动,运营同事在群里@所有人:“老板,官网首页挂了博彩链接,百度搜不到首页了,全是乱码!”… · 2026/9/27 2:13:40

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码