一、功能作用
开发者文档定义:https://developer.android.com/ndk/guides/hwasan
一般用来检测踩内存的时间、位置和方式
那么什么是才内存呢?
踩内存就是访问了不该访问的内存,常见的又两种:访问已经释放的内存和访问越界的内存。
踩内存:面试|搬了这么久的砖,居然还不知道什么“踩内存” - 知乎
HWASAN VS ASAN:ASAN和HWASAN原理解析_宋宝华-CSDN博客
二、用法
我个人的用法是在android.bp文件开启HWASAN功能后重新编译进行测试。
或者也可以按照开发者文档的需求来开启功能。
HWASan 能检测到 ASan 所能检测到的同一系列错误:
- 堆栈和堆缓冲区上溢/下溢
- 释放之后的堆使用情况
- 超出范围的堆栈使用情况
- 重复释放/错误释放
此外,HWASan 还可以检测:
- 返回之后的堆栈使用情况
两种不应该访问的内存:
越界:char *p = char[20];
p[23] = 30;//此时访问了越界的内存,报错
访问使用内存:char *p = char[20];
delete *p;
p[10]=20;//此时为访问了已经释放的内存,报错
hwasan检测机制:
用了内存标记,内存进行分配时分配的地址都会有随机的8位标记(在高8位上面);
通过地址进行访问时会检测地址中标记值和访问地址的标记值是否匹配;
越界类型中标记值为空;
访问已释放的内存类型中标记被更新。