malloc()man手册上说,它返回的内存是未初始化的:

The malloc() function allocates size bytes and returns a pointer to the allocated memory. The memory is not initialized. If size is 0, then malloc() returns either NULL, or a unique pointer value that can later be success-fully passed to free().

使用未经初始化的内存空间很容易导致程序 crash,因此,libc提供了一个 "MALLOC_PERTURB_"环境变量,用来指定 malloc()函数返回的内存空间的初始值。我没有找到比较权威的文档,但结合现有的资料和测试结果可知,假设:我们设定 "MALLOC_PERTURB_"环境变量的取值为 x,则,malloc() 函数返回的内存空间的初始值为:(x ^ 0xFF) & (0xFF)。示例程序如下:

#include <stdio.h>
#include <stdlib.h>void dump_array(unsigned char *array, int len)
{int i = 0;for (i = 0; i < len; ++i)printf("%02x ", array[i]);printf("\n");
}int main(void)
{int size = 10;unsigned char *array = NULL;array = malloc(sizeof(unsigned char) * size);if (array == NULL) {perror("malloc failed");return -1;}dump_array(array, size);free(array);dump_array(array, size);return 0;
}

运行结果如下:

$ gcc -o main ./main.c
$ MALLOC_PERTURB_=0xf0 ./main
0f 0f 0f 0f 0f 0f 0f 0f 0f 0f
00 00 00 00 00 00 00 00 10 c0
$ MALLOC_PERTURB_=0xf0 ./main
0f 0f 0f 0f 0f 0f 0f 0f 0f 0f
00 00 00 00 00 00 00 00 10 10
$ MALLOC_PERTURB_=0xf0 ./main
0f 0f 0f 0f 0f 0f 0f 0f 0f 0f
00 00 00 00 00 00 00 00 10 60

可以看到, 当指定 "MALLOC_PERTURB_=0xf0"后,malloc()返回的内存空间的初始值为 0x0ffree()之后的值是未知的。
基于此特性,我们可以借助 "MALLOC_PERTURB_"环境变量来调试可能存在问题的代码。

参考资料:

  1. https://udrepper.livejournal.com/11429.html
  2. https://www.gnu.org/software/libc/manual/html_node/Malloc-Tunable-Parameters.html
  3. https://www.borelly.net/cb/docs/libc/Malloc-Tunable-Parameters.html
  4. https://bugzilla.kernel.org/show_bug.cgi?id=20102

MALLOC_PERTURB_ 环境变量相关推荐

  1. Texlive安装与环境变量配置

    下载安装:https://www.jianshu.com/p/25896cc05cb4 去官网下载速度很快 环境变量配置:https://www.jianshu.com/p/f8f6c255098c

  2. Linux shell 学习笔记(4)— linux 环境变量(全局变量、局部变量及变量持久化)

    1. 环境变量概念及分类 bash shell 用一个叫作环境变量(environment variable)的特性来存储有关 shell 会话和工作环境的信息(这也是它们被称作环境变量的原因).这项 ...

  3. Python 标准库之 os (获取当前目录、读取/设置环境变量、重命名文件、运行shell命令、创建/删除/查看目录文件、判断目录/文件/存在、获取绝对路径、获取文件名、获取换行符、获取路径分隔符)

    1. os与sys模块的官方解释如下: os This module provides a portable way of using operating system dependent funct ...

  4. linux配置java环境变量(详细)

    一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586.bin 这时会出现一段协议,连继敲回车, ...

  5. Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)

    博客园 首页 新随笔 联系 管理 订阅 <div class="blogStats"><!--done--> 随笔- 556  文章- 38  评论- 77 ...

  6. linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效

    博客园 首页 新随笔 联系 管理 订阅 <div class="blogStats"><!--done--> 随笔- 6  文章- 2  评论- 2 < ...

  7. Linux环境变量说明与配置

    相关的配置文件说明: /etc/profile 范围:对所有用户生效 作用: a.定义USER变量 b.定义LOGNAME变量 c.定义MAIL变量 d.定义PATH变量 e.定义HOSTNAME变量 ...

  8. 【CV】Python下载安装及环境变量配置教程

    目录 Python下载 Python安装 Python环境变量配置 Python下载 可通过https://www.python.org/downloads/下载 1.进入网页后点击Windows,其 ...

  9. MySQL下载与安装教程以及环境变量配置

    MySQL下载 1 搜索mysql 选择mysql downloads 如下 2 点击滑动到底部选择社区版本(免费) 如下 3 选择Community Server 如下 4 选择对应的版本下载 我选 ...

  10. MinGW-w64 编译器下载,安装,以及环境变量配置

    下载地址:https://sourceforge.net/projects/mingw-w64/files/ 打开后往下滚动 下载后解压即可,解压内容如下 记住路径,下面配置环境变量 此电脑–> ...

最新文章

  1. Ubuntu 14.04 64bit上编译安装simple-rtmp-server(srs)服务器
  2. 香港科技大学谢知遥教授实验组招收机器学习全奖博士生
  3. linux程序移植到vxworks,VxWorks入门(一):VxWorks Vs Linux
  4. Bootloader的基本概念
  5. 存储过程 while is null_4.2 串的存储实现(2)
  6. Google面试题—有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD...
  7. 分类信息网站源码_分类信息网站如何增加搜索引收录
  8. 简单的描述关于开发部署产生401,500的错误处理
  9. 普通人能用华为P30拍出银河么?这是我们在北京实拍的结果
  10. UML类图关系大全【转】
  11. java 文件上传 乱码_java中文传值乱码问题的解决方法
  12. PowerShell自动部署IIS站点(Windows Server 2008 R2)
  13. 航空机场三字码和航空公司二字码
  14. HITB AMS 2021 议题分析与学习,感叹华人真多
  15. 洛谷入门-- P3717
  16. 当前地震预测研究的状况报告
  17. Android学习系列(30)--App列表之下拉刷新
  18. 网络电视(IPTV)系统解决方案
  19. 'localtime': This function or variable may be unsafe. Consider using localtime_s instead.
  20. DataBinding源码分析

热门文章

  1. IOS9 未受信任的企业级开发者 没有信任按钮 解决
  2. CIsco路由器实现IPSec 虚拟专用网原理及配置详解
  3. Excel的Index函数详解
  4. 开优步认识各色各样的人,人生需要这样的新鲜体验!
  5. 成都Uber优步司机奖励政策(2月25日)
  6. shader篇-纹理-遮罩纹理
  7. 基于BP神经网络的含水率预测模型matlab仿真
  8. IPD解读--华为500强的研发第一名,除了钱还有IPD
  9. 程序员修炼之道关键点总结和个人感悟
  10. CleanMyMac最新破解安装版