首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MMU如何检测指针的双重释放?

MMU如何检测指针的双重释放?
EN

Stack Overflow用户
提问于 2010-02-13 19:41:51
回答 4查看 578关注 0票数 4

内存管理单元(MMU)如何检测指针的双重释放?

我知道在释放指针之后将指针设为空是一种很好的做法,但假设程序员不这样做。是否有任何MMU机制来检测它?

EN

回答 4

Stack Overflow用户

发布于 2010-02-13 19:45:03

MMU与此无关。如果您两次释放使用malloc分配的指针,则可能会损坏C运行时堆。堆(不是MMU)原则上可以保护自己免受此类攻击,但大多数都不能。请注意,这与操作系统无关-- malloc()和free()都不是系统调用。

票数 13
EN

Stack Overflow用户

发布于 2010-02-13 19:47:46

内存管理单元(

)如何检测指针的双重释放?

内存管理单元只做虚拟地址空间->物理内存映射,它不知道堆是如何组织的/分配是如何工作的/...也就是操作系统/分配器的工作。

操作系统如何检测双重空闲?机制是什么??

它遍历列表/位图/...在分配的块中,看到没有使用您传递给它的地址分配的块,所以它检测到它是双重释放的。

然而,如果该块已经被重新分配,它会找到它并正确地将其释放=>,但是现在使用重新分配的块的代码将会变得疯狂,因为它已经正确地获得并且没有释放的内存变成了未分配的内存。

如果分配器保护未分配的内存,将其标记为不可读和不可写,并将其从虚拟地址空间的已提交页中删除,则程序将在该内存再次被访问时立即终止(但显然导致崩溃的代码实际上是清白的,因为它没有做错任何事情)。

否则,应用程序可能仍会工作一段时间,直到该内存块被分配给请求某些内存的其他代码段。在这一点上,同一个应用程序的两个部分将尝试在相同的内存块上工作,以及由此产生的所有混乱。

(感谢Pascal Cuoq指出我的错误。)

票数 5
EN

Stack Overflow用户

发布于 2010-02-13 20:00:03

不,没有MMU机制来检测它。在已经空闲的地址上调用free会导致程序崩溃,因为空闲的实现会做一些意想不到的事情,并导致分段错误。

运行valgrind是检查内存管理问题的好方法,例如双重释放指针。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2257342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档