求解内核中的内存管理机制
时间:2010-12-31
来源:互联网
看到一本书上有段这样的描述:如果在一个已分配的内存块尾部的后面(或者在它的头部)写数据,就很可能会损坏malloc库用于记录内存分配情况的数据结构。出现这个情况后,经过一段时间,一个malloc调用,甚至是一个free调用都会引发段错误并导致程序崩溃。。。。有点想不明白。。所以想了解下这里指的这些记录内存分配情况的数据结构是哪些。。linux下的malloc机制到底是怎样的。
作者: michaeltsing 发布时间: 2010-12-31
哪本书写出这样的话?修改内存数据区怎么会影响内存管理区了?内核地址空间管理不就是处理这样问题的吗?
作者: matthew_ye 发布时间: 2010-12-31
搜一下内核版的精华帖,看看有没有相关的介绍
作者: Godbach 发布时间: 2010-12-31
QUOTE:
哪本书写出这样的话?修改内存数据区怎么会影响内存管理区了?内核地址空间管理不就是处理这样问题的吗?
matthew_ye 发表于 2010-12-31 11:11
matthew_ye 发表于 2010-12-31 11:11
上面描述的情况应该是越界的时候出现的问题,是非正常的读写内存。。
作者: michaeltsing 发布时间: 2010-12-31
malloc是由libc提供的函数,可以想象成,libc向内核申请了一大块的空间,然后当用户调用malloc的时候,libc从它申请的那一大块空间中分一块返回给你。
于是libc需要知道,自己申请的那一大块中,哪些已经分配了,哪些没有。所以需要一些控制信息。而且一般来说,这些控制信息也放在这一大块中。
那么,如果你malloc的空间写越界了,就可能把这里面的控制信息给写坏了。
并且这种写坏当时是没法发现的,因为内核只知道分配了一大块出去。至于这一大块是libc在用,还是已经malloc出去了,内核不知道。libc也不知道,因为你写内存的时候不会调用libc的函数,而是直接写了。
于是,等到你再次去malloc或者free的时候,libc需要用到这些控制信息了,可能就会出问题。libc也不知道控制信息是否被写坏过(当然,可以有一些检验,但是不能保证100%校验成功),它就拿着被写坏的信息来处理,结果可能就访问到了内核尚未分配出现的空间,然后就崩溃了。
于是libc需要知道,自己申请的那一大块中,哪些已经分配了,哪些没有。所以需要一些控制信息。而且一般来说,这些控制信息也放在这一大块中。
那么,如果你malloc的空间写越界了,就可能把这里面的控制信息给写坏了。
并且这种写坏当时是没法发现的,因为内核只知道分配了一大块出去。至于这一大块是libc在用,还是已经malloc出去了,内核不知道。libc也不知道,因为你写内存的时候不会调用libc的函数,而是直接写了。
于是,等到你再次去malloc或者free的时候,libc需要用到这些控制信息了,可能就会出问题。libc也不知道控制信息是否被写坏过(当然,可以有一些检验,但是不能保证100%校验成功),它就拿着被写坏的信息来处理,结果可能就访问到了内核尚未分配出现的空间,然后就崩溃了。
作者: kouu 发布时间: 2010-12-31
回复 kouu
感谢kouu的回答。。。能不能再详细点,把libc中具体保存控制信息的数据结构给说下啊。。
感谢kouu的回答。。。能不能再详细点,把libc中具体保存控制信息的数据结构给说下啊。。
作者: Godbach: 发布时间: 2010-12-31
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28