深入理解内存检测工具:一文解析内存检测工具的全貌与使用技巧

C和C++是非常不安全且容易出错的编程语言,Address Sanitizer是由Google开发的一种工具,用于检测内存访问错误,如使用后释放(use-after-free)和内存泄漏。它已集成到GCC版本>= 4.8中,可用于C和C++代码。Address Sanitizer使用运行时插桩来跟踪内存分配,这意味着您必须使用AddressSanitizer构建代码,以充分利用其功能。

  • Use after free (dangling pointer dereference)

  • Heap buffer overflow

  • Stack buffer overflow

  • Global buffer overflow

  • Use after return

  • Use after scope

  • Initialization order bugs

  • Memory leaks

本文将会以上面8种场景来介绍内存检测工具AddressSanitizer。

注:本文已更新于星球,感兴趣的可以加入星球一起交流。

e10e4d4ed554332f129e8eff99bfdd26.jpeg

1.Use after free

以下面代码为例。首先,通过new关键字分配了一个整数的内存空间,并将其地址赋给指针 ptr。然后,使用 delete 关键字释放了这块内存。但是,在释放后,程序仍然尝试通过指针 ptr 访问已经释放的内存,并将值 10 赋给该内存位置,这就是使用后释放错误。

#include <iostream>

int main() {
  int* ptr = new int;
  delete ptr;
  *ptr = 10;  // Use after free
  return 0;
}

在编译时添加下面选项。

-fsanitize=address

运行生成的bin文件,得到如下结果。

55f361b18e29b9b41c0aa71d6434ed45.png

2.heap buffer overflow

相关推荐

  1. go语言内存泄漏检查工具

    2024-01-06 09:58:01       28 阅读
  2. C++ 内存泄漏检测工具——Valgrind(Linux系统)

    2024-01-06 09:58:01       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-06 09:58:01       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-06 09:58:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-06 09:58:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-06 09:58:01       18 阅读

热门阅读

  1. 牧马人K87调节键盘灯光模式

    2024-01-06 09:58:01       38 阅读
  2. Es 学习记录

    2024-01-06 09:58:01       34 阅读
  3. Shell:常用命令之dirname与basename

    2024-01-06 09:58:01       30 阅读
  4. 动手学深度学习—深度学习计算

    2024-01-06 09:58:01       29 阅读
  5. Apache绑定指定地址与端口

    2024-01-06 09:58:01       36 阅读
  6. ARM CCA机密计算架构软件栈简介

    2024-01-06 09:58:01       36 阅读
  7. leetcode231 判断一个给定的整数是否是2的n次幂

    2024-01-06 09:58:01       33 阅读
  8. Winform、WPF如何解决前端卡死问题

    2024-01-06 09:58:01       32 阅读
  9. Hbase进阶

    2024-01-06 09:58:01       31 阅读
  10. 数据库索引的使用

    2024-01-06 09:58:01       31 阅读