用途:该技能面向基于 LLVM 的动态二进制插桩与运行时监控,帮助在无源码或运行时修改程序行为、插入分析代码、监控执行并修改控制流与数据,适用于运行时分析工具、追踪与程序监控实现。
主要能力:
- 动态二进制插桩(DBI)工具介绍,包括 QBDI、Instrew、binopt。QBDI 提供指令回调、内存访问跟踪与指令过滤(如 addCodeCB、addMemAccessCB、addCodeRangeCB、deleteInstrumentation)。Instrew 在运行时将二进制提升为 LLVM IR,经自定义 Pass 优化后 JIT 重编译执行。
- 编译期插桩:编写 LLVM IR Instrumentation Pass,向基本块插入日志调用;使用 SanitizerCoverage(-fsanitize-coverage=trace-pc-guard、edge、trace-cmp)并实现 __sanitizer_cov_trace_pc_guard 等回调。
- 运行时跟踪:-finstrument-functions 配合 __cyg_profile_func_enter/exit;XRay(-fxray-instrument、-fxray-instruction-threshold、__xray_patch/__xray_unpatch)。
- 性能分析与系统调用监控:块频率分析、采样分析器集成、LLVM IR 层系统调用 Hook、eBPF(bpfcov)覆盖采集。
- 污点跟踪:影子内存记录污点并传播。
必要用法示例(保持原样): clang -fsanitize-coverage=trace-pc-guard source.c clang -finstrument-functions source.c clang -fxray-instrument -fxray-instruction-threshold=1 source.c
最佳实践:仅插桩必要路径、批量缓冲事件、生产环境采样、保证线程安全、利用调试信息解析符号。
适用场景:覆盖率引导模糊测试、调试集成、性能画像与系统调用监控。
限制与缺失:资料未提供授权、收费、性能指标或平台支持的具体说明;详细资源链接需从 https://raw.githubusercontent.com/gmh5225/awesome-llvm-security/refs/heads/main/README.md 获取。