A debug trick

在异常端点处运行 po $arg1,找出异常信息。

Address Sanitizer

概述

  1. 是一个运行时检测工具
  2. 发现内存问题
  3. 可以用于模拟器和设备

可以发现的问题

  1. Use after free
  2. Heap buffer overflow
  3. Stack buffer overflow
  4. Global variable overflow
  5. Overflows in C++ containers
  6. Use after return

原理

当打开这个功能时,在编译时传入了一个参数,在运行时链接了一个动态库 asan dylib

系统为所有内存维护了一个 shadow memory,标记了那些是可以正常使用的,那些是不可以访问的。

在上图中,红色区域是不可以访问的,因为不是预分配的地址。
为了达到这个目的,系统预留了部分内存地址做为 shadow memory,把每 8 个字节的状态用 1 个比特来代表。

在访问内存时,只需要做一个偏移来查看比特位的状态即可。

bool IsPoisoned(Addr) {
Shadow = Addr >> 3 + Offset
return (*Shadow) != 0
}

检测堆的内存错误原理

复写了系统的 malloc 函数,把分配好的内存区域周围标记为 posioned。这样子在越界时,可以检测出来。

可以检测出来下面的错误:

  • Heap underflows/overflows
  • Use-after-free
  • double free

检测栈上内存错误

类似,在栈上分配的内存周围标记为 posioned,并在访问内存之前做检查。

这样子也可以检测出全局变量内存错误。

复写了很多内存函数

不限于 memcpy, memset, strcpy, strlen, fwrite, printf, getline, ...

增加的负载

最新文章

  1. 【JavaScript吉光片羽】--- 滑动条
  2. CSS3-03 样式 2
  3. 初识genymotion安装遇上的VirtualBox问题
  4. Oracle创建/删除表空间和用户(2014-3-10 记)
  5. As 和 Is的区别
  6. Android Listener侦听的N种写法
  7. CF Gym 100685A Ariel
  8. 【转】7 Tips to Speed Up Eclipse
  9. USACO Section 3.3 商店购物 Shopping Offers
  10. poj 3273 Monthly Expense(贪心+二分)
  11. Android用户界面UI组件--AdapterView及其子类(五) Spinner和SpinnerAdapter
  12. 通过SSHFS在RHEL中安全的挂载远程Linux/UNIX目录或文件系统--转载
  13. 使用 Scut 搭建通服架构
  14. 读书笔记 effective c++ Item 11 在operator=中处理自我赋值
  15. 近期面试总结(PHP后端开发工程师)(部分笔试题)
  16. SQL Server学习之路(八):扩展SQL语句
  17. org.apache.hadoop.security.AccessControlException
  18. 转 VS2010 RDLC 横向合并时“未正确设置 tablix“Tablix1”的 FixedData 属性”错误解决方法 .
  19. [SQL]SQL Server 事务及回滚事务
  20. Android--将实体类转化成Json和Map的基类

热门文章

  1. wcf服务契约继承
  2. c++编程思想里面的错误(可能c++标准变了,所以以前的东西没有更新)
  3. js数组合并(一个数组添加到另一个数组里面)方法
  4. docker镜像基本操作
  5. HDU 1513 && POJ 1159 Palindrome (DP+LCS+滚动数组)
  6. Apache Struts 2 Documentation Core Developers Guide
  7. (匹配)Antenna Placement --POJ --3020
  8. (二分匹配 模板)过山车 -- hdu --2063
  9. ssh远程调用之shell脚本远程调用应用程序
  10. C# 调用C++ CLR dll类库时,实现从 string 到 sbyte* 的转换