引入
ASan是google提供的一个内存检测工具,(来自gpt3.5)
ASan通过在编译时插入额外的代码来实现内存错误检测,并提供了相应的运行时库来捕获和报告错误。可以知道通过一下方式实现:
-
插桩:ASan使用编译器插桩技术,在编译时修改源代码,插入额外的代码。这些额外的代码用于跟踪内存分配、释放和访问操作,以及检测内存错误。
-
内存分配器:ASan使用自定义的内存分配器,用于跟踪分配的内存块,并在每个内存块之前和之后添加红区(redzone)。红区是一段未分配的内存,用于检测缓冲区溢出。
-
彩色标记:ASan使用彩色标记技术,将分配的内存块分为不同的颜色,并将颜色信息存储在内存块的元数据中。这样,在访问内存时,ASan可以根据元数据中的颜色信息检测出内存错误。
原理理解速通 Short Version
run-time 的 library 取代了free 和malloc函数,
插桩
内存分配器
彩色标记
参考
https://learn.microsoft.com/zh-cn/cpp/sanitizers/asan?view=msvc-170
https://github.com/google/sanitizers/wiki/AddressSanitizer
https://github.com/google/sanitizers
https://zhuanlan.zhihu.com/p/382994002
https://github.com/google/sanitizers/wiki/AddressSanitizerAlgorithm