繁体   English   中英

mmap内存保护PROT_NONE的目的是什么?

[英]What’s the purpose of mmap memory protection PROT_NONE

我正在阅读mmap文档并且落在这一行:

PROT_NONE页面可能无法访问。

有没有用于将文件映射到内存但从不访问它?

PROT_NONE可用于实现防护页面 ,Microsoft具有相同的概念( MSDN )。

引用第一个链接:

...在内存分配操作期间分配额外的不可访问内存是一种减轻堆缓冲区溢出利用的技术。 这些保护页面是放置在一页或更大页面的所有内存分配之间的未映射页面。 保护页面在任何访问时都会导致分段错误。

因此,可用于实现对网络接口,虚拟机和解释器等区域的保护。 示例用法: pthread_attr_setguardsize,pthread_attr_getguardsize

一种可能的应用:您可以使用它来保留内存范围。 分配这样的区域后,您可以将指针用作特殊值。

一种可能的应用是一个透明地在“小”和“大”整数之间切换的库,具有一种小值优化的形式。 一个大整数将表示为指向保存实际数字的内存区域的指针。 一个小整数将是指向该保留存储区的指针,表示与该区域的偏移量相等的数字。 (我不是说这是实现这样一个库的最佳方法,只是它应该是可能的。)

PROT_NONE分配一个没有授予权限的连续虚拟内存区域。

正如其他人所提到的,这可以用来实现防护(触摸的页面导致段错误,用于捕获bug和安全目的)或“魔术”指针,其中PROT_NONE映射中的值将被解释为指针之外的其他内容。

另一个用途是当应用程序希望将多个独立映射映射为虚拟连续映射时。 这将通过首先使用PROT_NONE mmapping足够大的块,然后使用MAP_FIXED标志执行其他mmap调用以及在PROT_NONE映射区域内设置的地址来完成(使用MAP_FIXED会自动取消映射“被覆盖”的映射的一部分“)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM