为了更容易找到缓冲区溢出,我正在更改自定义内存分配器,以便它分配完整的4KB页面,而不是仅分配所需的字节数。然后更改页面保护和大小,以便如果调用方在分配的内存之前或之后进行写操作,应用程序将立即崩溃。
问题是,尽管我有足够的内存,但是由于内存不足,应用程序永远无法完全启动。这有两个原因:
第二个问题是最大的问题,我认为这与PTE的最大数量(页表项,存储有关虚拟内存如何映射到物理内存以及页是否应为只读的信息)有关有一个过程。
我的问题(或小费):
谢谢,
帕特里克
PS。对于那些会争辩说您不应该编写自己的内存管理器的人的说明:
最佳答案
shot弹枪方法是随机分配那些孤立的4KB条目。这意味着您将需要重复运行具有相同输入的相同测试。如果您很幸运,有时它将捕获错误。
一种更聪明的方法是使用随机算法以外的其他算法-例如是否依赖分配取决于调用堆栈。例如,您是否信任std::string
用户并怀疑使用原始malloc
?
关于c++ - Windows中有关PTE(页表项)的信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2667086/