Ste*_*e-o 16
PROT_NONE
可以用来实现防护页面,微软有相同的概念(MSDN).
引用第一个链接:
...在内存分配操作期间分配额外的不可访问内存是一种减轻堆缓冲区溢出利用的技术.这些保护页面是放置在一页或更大页面的所有内存分配之间的未映射页面.保护页面在任何访问时都会导致分段错误.
因此,可用于实现对网络接口,虚拟机和解释器等区域的保护.示例用法:pthread_attr_setguardsize,pthread_attr_getguardsize.
PROT_NONE 在没有授予权限的情况下分配一个连续的虚拟内存区域。
正如其他人所提到的,这对于实现保护(触摸导致段错误的页面,用于错误搜索和安全目的)或“魔术”指针很有用,其中 PROT_NONE 映射中的值将被解释为指针以外的其他内容.
另一种用途是当应用程序希望将多个独立映射映射为虚拟连续映射时。这将通过首先使用 PROT_NONE 映射一个足够大的块来完成,然后使用 MAP_FIXED 标志和在 PROT_NONE 映射区域内设置的地址执行其他 mmap 调用(使用 MAP_FIXED 自动取消映射被“覆盖”的部分映射”)。
一种可能的应用:您可以使用它来保留内存范围。分配这样的区域后,您可以使用指向该范围的指针作为特殊值。
\n\n一个可能的应用程序是一个库,它以小值优化的形式在 \xe2\x80\x9csmall\xe2\x80\x9d 和 \xe2\x80\x9cbig\xe2\x80\x9d 整数之间透明地切换。大整数将表示为指向保存实际数字的内存区域的指针。一个小整数将是指向该保留内存区域的指针,表示等于该区域的偏移量的数字。(我并不是说这是实现此类库的最佳方法,只是说它应该是可能的。)
\n