意图:检查源代码中是否存在某些地址,在free掉之后还对其进行了访问。
cat hello_sani.cpp
- #include
-
- using namespace std;
-
- int main(int argc, char **argv)
- {
- int i = 1;
- int *A = new int[12];
- cout <<"newed A &A[0]="<<&A[0]<<" &A[1]="<<&A[1]<
-
- delete [] A;
- cout<<"deleted A"<
- A[i]=1; // =1
- A[i] = A[i] + 1; // =2
- A[i]=3; // =3
-
- return 0;
- }
Makefie
- hello_sani:
-
- %: %.cp
- clang++ -g -O -fsanitize=address $< -o $@
-
- %: %.cpp
- clang++ -g -O -o $@ $<
-
- .PHONY: clean
- clean:
- rm -rf hello_sani
2, 编译运行效果
2.1 带 use after free 检查
编译命令:
clang++ -g -O -fsanitize=address $< -o $@
带 use after free 检查的运行效果,其中的错误提示看图:

2.2不 带 use after free 检查
编译命令:
clang++ -g -O $< -o $@
不带 use after free 检查的运行效果:

3,应用场景
可以在 Makefile 中加一个编译命令控制
ifeq (SAN 1)
SAN_FLAGS := -fsanitize=address
else
SAN_FLAGS :=
endif
%.o: %.cpp
clang++ -g -O $(SAN_FLAGS) $< -o $@
具体编译:
不做 sani check 时的构建:
$ make
做 sani check 时 的构建:
$ make SAN=1
-
相关阅读:
DTPA PEG 异硫氰酸荧光素,DTPA PEG FITC,FITC-PEG-DTPA
lintcode 125 · 背包问题(二)
酷开科技丨酷开系统——智能家居生活的娱乐核心
专访阿里云 RocketMQ 团队:现代微服务架构需要新的消息系统
CSS三大特性之层叠性
七夕节赚徽章拉
Redis未授权访问漏洞复现
HashMap面试原理梳理-简单一看就懂
OceanBase携手天阳科技推出新一代信用卡核心系统联合解决方案,为信用卡业务稳健增长提供创新活力与数据动力
iOS安全加固方法及实现
-
原文地址:https://blog.csdn.net/eloudy/article/details/138037327
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU