我正在尝试重新编码malloc和自由函数,但是munmap出现问题。

使用我的自定义malloc,我创建了一个带有mmap(例如4Kb)的内存池,因此当我的malloc被调用时,我可以返回该池的索引作为地址。

这项工作正常,但是当我使用自定义的free(调用munmap)时,我想使用自定义的malloc分配其他内容,则出现了段错误,就像munmap取消了我的整个IRE游泳池。

例:

Ask 1024 bytes to my malloc
-> First call so malloc allocate a pool of 4 * pagesize() (So 16 000
bytes)
-> Return to me an addr than I use. (addr[0] = 42)
-> Free with munmap this address (munmap(addr, 1024))
-> re ask to my malloc 1024 bytes
-> Try to fill it with something and segfault.

我不太了解发生了什么。 munmap是否会删除我的所有池?

对不起,英语不好。

最佳答案

您正在取消映射整个页面。



munmap(2)

因此,当您用munmap进行首次分配时,您将未映射整个首页。您应该等待仅在取消分配整个页面后才取消映射。。或者根本不取消映射-请确保两个进程不会从同一页面获取内存,因此没有安全漏洞。

10-05 19:49