如何在地址空间找到漏洞?

fuz*_*fuz 5 c posix freebsd mmap address-space

我有一组文件,其长度都是我操作系统(FreeBSD 10)页面大小的倍数.我想将mmap()这些文件连接到RAM的连续页面,这使我能够将一组文件视为一个大型数据.

最好使用便携式功能,如何找到一个足够大的未映射地址空间区域,这样我才能确定mmap()对该区域的一系列调用是否会成功?

chq*_*lie 5

跟着这些步骤:

  1. 首先计算枚举文件并总结其大小所需的总大小.
  2. 映射此大小的单个匿名内存区域mmap.如果失败了,你输了.
  3. 保存指针和unmap区域(实际上,unmap如果mmap具有固定地址的系统隐式取消映射任何先前的重叠区域,则可能不需要).
  4. 使用适当的MAP_FIXED标志映射此地址的第一个文件.
  5. 按文件大小增加地址.
  6. 循环到步骤4,直到所有文件都已映射.

这应该可以完全移植到任何POSIX系统,但是某些操作系统可能会有一些阻止这种方法的怪癖.试试吧.

  • 哦,是的,你甚至不需要取消映射区域 - 就我所关心的问题而言,`mmap`会很快地用'MAP_FIXED`映射到它上面. (2认同)