【发布时间】:2011-11-15 10:04:06
【问题描述】:
经过malloc() 的 glibc 代码和实际分配器之后
即_int_malloc() 函数我无法弄清楚“perturn_byte”的意义。它在alloc_perturb macro()_int_malloc()的很多地方都被使用。
我知道这个问题只是为了具体回答,请原谅我。但万一有人已经知道 anwser 会为我省去一些麻烦。
谢谢
【问题讨论】:
经过malloc() 的 glibc 代码和实际分配器之后
即_int_malloc() 函数我无法弄清楚“perturn_byte”的意义。它在alloc_perturb macro()_int_malloc()的很多地方都被使用。
我知道这个问题只是为了具体回答,请原谅我。但万一有人已经知道 anwser 会为我省去一些麻烦。
谢谢
【问题讨论】:
这是提交,它添加了 perturb_byte:
http://repo.or.cz/w/glibc.git/commitdiff/854278dff83a754f1d24a17c1c1068e8ebfe6195
以下是关键评论(以及开启此功能的示例):
+ /* Make uses of freed and uninitialized memory known. */
+ mallopt (M_PERTURB, 42);
因此,它是检测滥用 free-d 或 malloce 但尚未初始化的内存的调试功能。
malloc 从系统(通过brk 或mmap)获取的每个内存字节都将被perturb_byte(不是零)填充。我想,被释放的内存也会被填满。
然后用户可以检查,在 malloced 范围内是否还有一些未初始化的,或者是否有一些写入到释放的内存。
这里是文档:http://www.gnu.org/s/hello/manual/libc/Malloc-Tunable-Parameters.html
M_PERTURB
如果非零,则在分配内存块(由 calloc 分配时除外)和释放时,根据此参数的某些低位位填充内存块。这可用于调试未初始化或已释放堆内存的使用。
正如我所见,这只能用于从调试器进行手动检查。
【讨论】: