CLinux:具有不同权限的双映射内存

CLinux:具有不同权限的双映射内存,第1张

概述我的程序将数据指针传递给第三方插件,意图数据应该是只读的,因此阻止插件写入数据对象会很好.理想情况下,如果插件尝试写入,则会出现段错误.我听说有一些方法可以对内存区域进行双重映射,这样第二个虚拟地址范围就指向相同的物理内存页面.第二个映射没有写入权限,导出的指针将使用此地址范围而不是原始(可写)地址范围.我宁愿不更改原始内存分配,无论它们是否碰巧使用mall

我的程序将数据指针传递给第三方插件,意图数据应该是只读的,因此阻止插件写入数据对象会很好.理想情况下,如果插件尝试写入,则会出现段错误.我听说有一些方法可以对内存区域进行双重映射,这样第二个虚拟地址范围就指向相同的物理内存页面.第二个映射没有写入权限,导出的指针将使用此地址范围而不是原始(可写)地址范围.我宁愿不更改原始内存分配,无论它们是否碰巧使用malloc或mmap或其他.有人可以解释如何做到这一点?最佳答案可以获得双映射,但它需要一些工作.

我知道如何创建这种双映射的唯一方法是使用mmap函数调用.对于mmap,您需要某种文件描述符.幸运的是,Linux允许您获取共享内存对象,因此不需要存储介质上的真实文件.

这是一个完整的示例,演示如何创建共享内存对象,从中创建读/写和只读指针,然后执行一些基本测试:

#include 

编译:gcc test.c -std = c99 -lrt

出于某种原因,我得到一个警告,没有声明ftruncate.不知道为什么.代码运行良好.示例输出:

file descriptor is 3rw_data is mapped to address 0x7f1778d60000ro_data is mapped to address 0x7f1778385000writing to rw_data test passedreading from ro_data test passedNow trying to write to ro_data. This should cause a segmentation faultSegmentation fault

我把记忆释放作为读者的练习:-) 总结

以上是内存溢出为你收集整理的C / Linux:具有不同权限的双映射内存全部内容,希望文章能够帮你解决C / Linux:具有不同权限的双映射内存所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1258702.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)