标签:函数 style 好的 variable 分享 container es2017 检查 负载
在异常端点处运行 po $arg1
,找出异常信息。
?
当打开这个功能时,在编译时传入了一个参数,在运行时链接了一个动态库 asan dylib
。
?
系统为所有内存维护了一个 shadow memory,标记了那些是可以正常使用的,那些是不可以访问的。
?
在上图中,红色区域是不可以访问的,因为不是预分配的地址。
为了达到这个目的,系统预留了部分内存地址做为 shadow memory,把每 8 个字节的状态用 1 个比特来代表。
?
在访问内存时,只需要做一个偏移来查看比特位的状态即可。
bool IsPoisoned(Addr) {
Shadow = Addr >> 3 + Offset
return (*Shadow) != 0
}
复写了系统的 malloc
函数,把分配好的内存区域周围标记为 posioned。这样子在越界时,可以检测出来。
?
可以检测出来下面的错误:
类似,在栈上分配的内存周围标记为 posioned,并在访问内存之前做检查。
?
这样子也可以检测出全局变量内存错误。
不限于 memcpy, memset, strcpy, strlen, fwrite, printf, getline, ...
?
Advanced Debugging and the Address Sanitizer
标签:函数 style 好的 variable 分享 container es2017 检查 负载
原文地址:http://www.cnblogs.com/huahuahu/p/Advanced-Debugging-and-the-Address-Sanitizer.html