avatar
文章
42
标签
11
分类
6

Home
Archives
Tags
Categories
Anthony Li's Blogs
搜索
Home
Archives
Tags
Categories

Anthony Li's Blogs

memory sanitizer
发表于2024-10-10|computer_sciencesanitizer
1. 简介MemorySanitizer简称msan,用于发现C/C++程序中对未初始化内存的读取。 msan是比特精度的。 msan的功能是Valgrind功能的子集,但运行速度更快。 msan使用stderr打印错误报告 msan发现错误即报告,而不是等到程序即将结束时统一报告 msan发现如下bug并报告warning: 在条件分支中使用未初始化的值。 使用未初始化的指针进行内存访问。 函数返回未初始化的值(这是未定义行为,可以使用-fno-sanitize-memory-param-retval来disable这项检查)。 传递未初始化数据到一些libc函数中。 2. 使用方法2.1 常用使用方法 使用clang编译器 使用编译选项-fsanitize=memory -fPIE -pie -fno-omit-frame-pointer -g 默认错误报告是fatal的,即发现并报告第一个错误后就退出,如需发现多个错误需使用编译选项-fsanitize-recover=memory 例如如下程序a.cc: 12345678910111213#incl ...
sanitizer工具
发表于2024-10-07|computer_sciencesanitizer
1. Sanitizer系列简介中文直译:sanity n. 神志正常,精神健全sanitize v. 消毒sanitizer n. 消毒剂 2. 包含的工具2.1 AddressSanitizer用于发现C/C++程序中的内存错误,比如use-after-free和{heap,stack,global}-buffer overflow。 2.2 LeakSanitizer用于发现内存泄漏,已被集成到AddressSanitizer中。 2.3 ThreadSanitizer用于发现C/C++和Go程序中的数据竞争(data race)。 2.4 MemorySanitizer用于发现未初始化内存的使用。 3. 注意 并不是一定能检测出所有的bug ! ! ! asan/tsan/msan在同一个程序中最多使用一个 4. 参考文献 https://github.com/google/sanitizers/wiki https://clang.llvm.org/docs/UsersManual.html#cmdoption-f-no-san ...
Linux less命令常见用法
发表于2024-10-06|computer_science
1. 简介 类似于more命令,但除了向前(下)移动也允许向后(上)移动 不会在启动时读入整个输入文件,因此比vi启动更快 less的命令基于more和vi less的命令前可以加一个十进制数N,某些命令可以使用它 2. 常用命令 h或H: 显示命令帮助信息 q: 退出less <SPACE>: 前进(向下)N行,默认一个window b: 后退N行,默认一个window <ENTER>或j: 前进N行,默认1 k或y: 后退N行,默认1 d: 前进N行,默认半个window;如果指定了N,它成为后续d和u命令的默认值 u: 后退N行,默认半个window;如果指定了N,它成为后续d和u命令的默认值 R: 重新加载当前文件;在查看的当前文件被改变时很有用 F: 前进至文件结尾并保持继续读文件(类似于tail -f),按^C停止等待文件生长 g: 跳转到第N行,默认第1行;如果N很大这个命令可能很慢 G: 跳转到第N行,默认最后一行;如果N很大这个命令可能很慢 p或%: 跳转到N%位置处,N的取值范围为[0, 100],且可以包含 ...
address sanitizer
发表于2024-09-28|computer_sciencesanitizer
1. 简介AddressSantizer简称为asan。 用于发现C/C++程序中的内存错误。 asan运行很快,它给程序带来的平均slowdown大约2x。 asan包括两部分: 静态插桩模块(compiler instrumentation module, 目前实现是一个LLVM pass) 运行时库(提供了asan版本的malloc、free等函数) 插桩(instrumentation)即修改程序以便于对它进行分析。 编译器插桩技术是一种在源代码被编译为可执行代码的过程中,向代码中添加额外的指令或元数据的方法。 2. 使用方法2.1 编译器版本要求llvm 3.1及以上,gcc 4.8及以上 2.2 常见使用过程编译: 1$ clang -fsanitize=address -O1 -fno-omit-frame-pointer -g use-after-free.c -o use-after-free 运行: 1$ ./use-after-free 即: 使用clang编译器。 编译时指定-fsanitize=address选项。 为了更高的性能, ...
leak sanitizer
发表于2024-09-27|computer_sciencesanitizer
1. 简介 简称LSan 用于发现内存泄漏 已集成到asan中 在性能关键的场景中,LSan也可以在无asan插桩时使用 2. 使用方法2.1 using lsan on top of asan像使用asan那样使用,例如a.c存在内存泄漏问题,代码如下: 123456789#include <stdlib.h>void *p;int main() { p = malloc(7); p = 0; // The memory is leaked here. return 0;} 使用如下方式编译运行: 1$ clang -fsanitize=address -g a.c -o a && ./a 如果使用asan编译的程序不需检查内存泄漏(只需检查其他asan bugs),则使用运行时flagASAN_OPTIONS=detect_leaks=0。 2.2 lsan单独模式如果只需检查内存泄漏且不想被asan拖慢运行速度,可以使用编译时flag-fsanitize=leak而不是-fsanitize=address,此时不 ...
address sanitizer算法原理
发表于2024-09-26|computer_sciencesanitizer
1. 算法原理精简版(TL;DR)1.1 运行时库asan运行时库提供了asan版的malloc和free函数。 malloc函数在分配的内存区域周围会再分配redzones内存并在redzones内存投毒(poisoned)。 free函数对被释放的内存区域投毒(poisoned),并将它放到临时隔离队列(quarantine queue)中,使它在一段时间内不会被再malloc。 1.2 插桩程序中的内存访问操作会做如下转换: 转换前: 1*address = ...; // or: ... = *address; 转换后: 1234if (IsPoisoned(address)) { ReportError(address, kAccessSize, kIsWrite);}*address = ...; // or: ... = *address; 2. 内存映射2.1 内存划分整个内存虚拟地址空间被分为不相交的两类: Mem:被常规应用代码使用的内存区域。 Shadow:用于保存元数据(称为shadow values)。 2.2 内 ...
破阵子·四十年来家国
发表于2024-09-22|literature(文学)
破阵子·四十年来家国 [五代] 李煜 四十年来家国,三千里地山河。凤阁龙楼连霄汉,玉树琼枝作烟萝,几曾识干戈? 一旦归为臣虏,沈腰潘鬓消磨。最是仓皇辞庙日,教坊犹奏别离歌,垂泪对宫娥。
自题金山画像
发表于2024-09-01|literature(文学)
自题金山画像 [宋] 苏轼 心似已灰之木,身如不系之舟。 问汝平生功业,黄州惠州儋州。
少年行
发表于2024-08-20|literature(文学)
少年行 [唐] 王维 (其一) 新丰美酒斗十千,咸阳游侠多少年。 相逢意气为君饮,系马高楼垂柳边。 (其二) 出身仕汉羽林郎,初随骠骑战渔阳。 孰知不向边庭苦,纵死犹闻侠骨香。 (其三) 一身能擘两雕弧,虏骑千重只似无。 偏坐金鞍调白羽,纷纷射杀五单于。 (其四) 汉家君臣欢宴终,高议云台论战功。 天子临轩赐侯印,将军佩出明光宫。
唐太宗封禅与魏征答问
发表于2024-08-17|literature(文学)
出自《资治通鉴·唐纪·唐纪十》 上曰:“公不欲朕封禅者,以功未高邪?”曰:“高矣。”“德未厚邪?”曰:“厚矣。”“中国未安邪?”曰:“安矣。”“四夷未服邪?”曰:“服矣。”“年谷未丰邪?”曰:“丰矣。”“符瑞未至邪?”曰:“至矣。”“然则何为不可封禅?”对曰:“陛下虽有此六者,然承隋末大乱之后,户口未复,仓廪尚虚,而车驾东巡,千乘万骑,其供顿劳费,未易任也。且陛下封禅,则万国咸集,远夷君长,皆当扈从;今自伊、洛以东至于海、岱,烟火尚希,灌莽极目,此乃引戎狄入腹中,示之以虚弱也。况赏赉不赀,未厌远人之望;给复连年,不偿百姓之劳;崇虚名而受实害,陛下将焉用之!”
123…5
avatar
Anthony Li
文章
42
标签
11
分类
6
Follow Me
最新文章
庆东原·忘忧草2026-03-13
送别2025-12-15
赠药山高僧惟俨二首2025-08-30
桃花庵歌2025-06-28
自遣2025-04-06
分类
  • computer_science26
    • gdb6
    • git2
    • linker6
    • sanitizer5
  • literature(文学)16
标签
c++ git history(历史) linux poem(诗歌) excerpt(摘抄) shell linker loader gdb sanitizer
归档
  • 三月 20261
  • 十二月 20251
  • 八月 20251
  • 六月 20251
  • 四月 20251
  • 十二月 20242
  • 十一月 20242
  • 十月 20244
网站资讯
文章数目 :
42
本站访客数 :
本站总访问量 :
最后更新时间 :
©2019 - 2026 By Anthony Li
框架 Hexo|主题 Butterfly
搜索
数据库加载中