C 设置边界保护数组

C 设置边界保护数组,c,windows,linux,mmu,C,Windows,Linux,Mmu,我想分配一个数组,并对其进行设置,使其前后的页面都受到内存管理单元的保护,这样就可以自动捕获在数组边界上运行的尝试;然后捕获它,以便以可控的方式处理错误 我怀疑是否会有一个可移植的解决方案,但在Windows上使用Microsoft C和在Linux上使用GCC的最佳平台特定方法是什么?实际上,有一种可移植的方法可以检测软件中的内存分配溢出。提供fencepost覆盖检测 围栏柱内存是内存正上方或正下方的区域 拨款。编写能够访问以上或以下内容的代码太容易了 低于分配-尤其是在处理数组或字符串时。

我想分配一个数组,并对其进行设置,使其前后的页面都受到内存管理单元的保护,这样就可以自动捕获在数组边界上运行的尝试;然后捕获它,以便以可控的方式处理错误


我怀疑是否会有一个可移植的解决方案,但在Windows上使用Microsoft C和在Linux上使用GCC的最佳平台特定方法是什么?

实际上,有一种可移植的方法可以检测软件中的内存分配溢出。提供fencepost覆盖检测

围栏柱内存是内存正上方或正下方的区域 拨款。编写能够访问以上或以下内容的代码太容易了 低于分配-尤其是在处理数组或字符串时。 该库可以在每个位置周围的区域中写入特殊值 这样,当这些区域被覆盖时,它就会注意到


有,尽管该行为在Windows Vista中已被删除,因为人们一直将其报告为安全漏洞,即使它不是。内存管理单元在页面粒度中工作,您可以分配未在页面边界上终止的数组-在这种情况下,在数组末端和页面边界之间对内存的访问无效不会被检测到。啊,看起来该功能使用的机制仍然可用,但是?这似乎是Windows的解决方案。-是的,我想我需要确保在页面边界上分配有问题的数组。好的,谢谢,这看起来是一个很好的用于调试目的的可移植解决方案?不过,我要寻找的是一种确定性的东西,我可以使用它从解释器的内部循环中进行一些显式检查。您还可以根据自己的需要扩展或自定义GCC编译器(使用插件或MELT扩展)。可能是实现这一目标的相关工具。