当前位置:网站首页>内存问题难定位,那是因为你没用ASAN
内存问题难定位,那是因为你没用ASAN
2022-08-05 11:44:00 【InfoQ】
1.什么是ASAN
2.为什么我们需要ASAN
3.ASAN可以定位哪些内存使用问题
int main(int argc, char **argv) {
int *array = new int[100];
array[0] = 0;
int res = array[argc + 100]; // BOOM
delete [] array;
return res;
}
int main(int argc, char **argv) {
int stack_array[100];
stack_array[1] = 0;
return stack_array[argc + 100]; // BOOM
}
int global_array[100] = {-1};
int main(int argc, char **argv) {
return global_array[argc + 100]; // BOOM
}
int main(int argc, char **argv) {
int *array = new int[100];
delete [] array;
return array[argc]; // BOOM
}
int *ptr;
__attribute__((noinline))
void FunctionThatEscapesLocalObject() {
int local[100];
ptr = &local[0];
}
int main(int argc, char **argv) {
FunctionThatEscapesLocalObject();
return ptr[argc];
}
4.怎么使用ASAN工具
- -fsanitize=address 开起asan能力,gcc 4.8版本开启支持。
- -fsanitize-recover=address :asan检查到错误后,不core继续运行,需要配合环境变量ASAN_OPTIONS=halt_on_error=0:report_path=xxx使用。gcc 6版本开始支持。
#include <stdlib.h>
int main()
{
int *p = malloc(sizeof(int)*10);
free(p);
*p = 3;//该程序正常情况下并不会导致进程core,因为free后的内存被glibc的内存分配器缓存着
return 0;
}
#include <stdlib.h>
int main()
{
int *p = malloc(sizeof(int)*10);
free(p);
*p = 3; //错误1.释放后继续使用
p = malloc(sizeof(int)*10);
p[11] = 3;//错误2,越界写
return 0;
}
5. ASAN的原理是什么
边栏推荐
猜你喜欢
小红的aba子序列(离散化、二分、dp维护区间最短)
Scaling-law和模型结构的关系:不是所有的结构放大后都能保持最好性能
微信小程序标题栏封装
Google启动通用图像嵌入挑战赛
PostgreSQL 2022 Report: Rising popularity, open source, reliability and scaling key
字节秋招二面把我干懵了,问我SYN报文什么情况下会被丢弃?
解决2022Visual Studio中scanf返回值被忽略问题
163_技巧_Power BI 一键批量建立自定义字段参数
ECCV 2022 | 视听分割:全新任务,助力视听场景像素级精细化理解
智源社区AI周刊No.92:“计算复杂度”理论奠基人Juris Hartmanis逝世;美国AI学生九年涨2倍,大学教师短缺;2022智源大会观点报告发布[附下载]
随机推荐
训练集Loss收敛,但是测试集Loss震荡的厉害?
Hands-on Deep Learning_GoogLeNet / Inceptionv1v2v3v4
再获殊荣 | 赛宁网安入选2022年度“培育独角兽”企业榜单
Can't get in to ask questions.I want to ask you a question about the return value (traversal of the graph), please give Xiaobai an answer.
Mathcad 15.0软件安装包下载及安装教程
Five reasons why developers choose Klocwork, a static analysis tool for code quality, for software security
使用Netty编写通用redis客户端(可指定服务器地址与端口号连接任意redis)
课表小程序使用攻略
TiDB 6.0 Placement Rules In SQL Usage Practice
623. 在二叉树中增加一行 : 简单二叉树遍历运用题
Android development with Kotlin programming language three loop control
UDP communication
hdu4545 魔法串
平安萌娃卡保险怎么样?让父母读懂几个识别产品的方法
前沿技术数字孪生如何应用在智慧城市上?
手把手教你定位线上MySQL慢查询问题,包教包会
WingIDE 7.2.0 远程调试
JS 从零手写实现一个call、apply方法
hdu4545 Magic String
力扣330 按要求补齐数组(贪心)