jwilk/detsan
GitHub: jwilk/detsan
detsan 利用 Clang 代码覆盖率插桩帮助开发者检测 C/C++ 程序中非确定性行为的来源。
Stars: 3 | Forks: 0
# 概述
**detsan** 利用 `clang 的代码覆盖率插桩
`_
来帮助您找出 C(或 C++)程序中非确定性的来源。
.. code:: console
$ cat -n target.c
1 #include
2 #include
3
4 int main(int argc, char **argv)
5 {
6 FILE *fp = fopen("/dev/urandom", "r");
7 if (fp == NULL)
8 abort();
9 unsigned int v;
10 size_t r = fread(&v, sizeof v, 1, fp);
11 if (r != 1)
12 abort();
13 if (v & 1U)
14 puts("Looks like an odd number to me!");
15 else
16 puts("An even number? How quaint!");
17 fclose(fp);
18 return 0;
19 }
$ clang -g -fsanitize-coverage=trace-pc-guard -fsanitize=address target.c -o target
$ detsan ./target
+ /path/to/target.c:16:9 (main)
- /path/to/target.c:14:9 (main)
# 前置条件
* Python ≥ 3.6
* Clang ≥ 4.0
.. vim:ft=rst ts=3 sts=3 sw=3 et
标签:C/C++, Clang, 事务性I/O, 代码分析, 凭证管理, 确定性测试, 逆向工具