此外,还会生成模块构造函数,即 __sanitizer_cov_trace_pc_guard_init(uint32_t* start, uint32_t* stop)。所有 __sanitizer_cov_ 函数均应由用户提供。您可以按照使用 Guard 跟踪计算机中的示例操作: https://clang.llvm.org/docs/SanitizerCoverage.html#tracing-pcs-with-guards 除了跟踪控制流外,SanitizerCoverage 还可以跟踪数据流。此功能可通过 fsanitize-coverage=trace-cmp 激活,并通过 __sanitizer_cov_trace_* 函数检测所有开关和比较指令来实现。对于整数除法和 GEP 指令,也存在类似的功能,可分别通过 fsanitize-coverage=trace-div 和 fsanitize-coverage=trace-gep 激活。这是一个实验性界面,可能危及线程安全,可能随时更改,但在 Android 构建中提供并可运行此界面。 在擦除器覆盖会话期间,覆盖信息记录在两个文件中,即 .sancov 文件和 sancov.map 文件。前一个文件包含程序的所有仪器测试点,而后一个文件包含在前一个文件中用一系列索引表示的执行跟踪。默认情况下,这两个文件存储在当前工作目录中,系统将为执行过程中运行的每个可执行的共享对象创建一个目录。 结论 ASan、UBSan 和 SanitizerCoverage 仅仅是 LLVM 擦除器在 Android 中应用的开端。目前,正在向 Android 构建系统中集成更多的 LLVM 擦除器。本文所介绍的擦除器可用作代码运行状况和系统稳定性检测工具,Android 安全团队甚至正在用它们来发现和预防安全错误!返回搜狐,查看更多 (责任编辑:本港台直播) |