diff options
| author | Kostya Serebryany <kcc@google.com> | 2019-05-23 01:03:42 +0000 |
|---|---|---|
| committer | Kostya Serebryany <kcc@google.com> | 2019-05-23 01:03:42 +0000 |
| commit | 51570280afb827eea889ef8879bf2b8e8decf6a1 (patch) | |
| tree | f576a77cb95b75f31b9b47568ee14393fe1ff4db /lib/fuzzer/scripts | |
| parent | 0c2ddb421767842d2a7c761c4725e4e34ebe8826 (diff) | |
| download | compiler-rt-51570280afb827eea889ef8879bf2b8e8decf6a1.tar.gz | |
[libFuzzer] remove the data-flow-trace (DFT) python scripts; their functionality is now part of libFuzzer proper; also write functions.txt to the disk only if this file doesn't exist yet
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@361452 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/fuzzer/scripts')
| -rwxr-xr-x | lib/fuzzer/scripts/collect_data_flow.py | 80 | ||||
| -rwxr-xr-x | lib/fuzzer/scripts/merge_data_flow.py | 58 |
2 files changed, 0 insertions, 138 deletions
diff --git a/lib/fuzzer/scripts/collect_data_flow.py b/lib/fuzzer/scripts/collect_data_flow.py deleted file mode 100755 index bd601eb63..000000000 --- a/lib/fuzzer/scripts/collect_data_flow.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python3 -#===- lib/fuzzer/scripts/collect_data_flow.py ------------------------------===# -# -# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -# See https://llvm.org/LICENSE.txt for license information. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -# -#===------------------------------------------------------------------------===# -# Runs the data-flow tracer several times on the same input in order to collect -# the complete trace for all input bytes (running it on all bytes at once -# may fail if DFSan runs out of labels). -# Usage: -# -# # Collect dataflow for one input, store it in OUTPUT (default is stdout) -# collect_data_flow.py BINARY INPUT [OUTPUT] -# -# # Collect dataflow for all inputs in CORPUS_DIR, store them in OUTPUT_DIR -# collect_data_flow.py BINARY CORPUS_DIR OUTPUT_DIR -#===------------------------------------------------------------------------===# -import atexit -import hashlib -import sys -import os -import subprocess -import tempfile -import shutil - -tmpdir = "" - -def cleanup(d): - print("removing: %s" % d) - shutil.rmtree(d) - -def collect_dataflow_for_corpus(self, exe, corpus_dir, output_dir): - print("Collecting dataflow for corpus: %s output_dir: %s" % (corpus_dir, - output_dir)) - assert not os.path.exists(output_dir) - os.mkdir(output_dir) - for root, dirs, files in os.walk(corpus_dir): - for f in files: - path = os.path.join(root, f) - with open(path, 'rb') as fh: - data = fh.read() - sha1 = hashlib.sha1(data).hexdigest() - output = os.path.join(output_dir, sha1) - subprocess.call([self, exe, path, output]) - functions_txt = open(os.path.join(output_dir, "functions.txt"), "w") - subprocess.call([exe], stdout=functions_txt) - - -def main(argv): - exe = argv[1] - inp = argv[2] - if os.path.isdir(inp): - return collect_dataflow_for_corpus(argv[0], exe, inp, argv[3]) - size = os.path.getsize(inp) - q = [[0, size]] - tmpdir = tempfile.mkdtemp(prefix="libfuzzer-tmp-") - atexit.register(cleanup, tmpdir) - print("tmpdir: ", tmpdir) - outputs = [] - while len(q): - r = q.pop() - print("******* Trying: ", r) - tmpfile = os.path.join(tmpdir, str(r[0]) + "-" + str(r[1])) - ret = subprocess.call([exe, str(r[0]), str(r[1]), inp, tmpfile]) - if ret and r[1] - r[0] >= 2: - q.append([r[0], (r[1] + r[0]) // 2]) - q.append([(r[1] + r[0]) // 2, r[1]]) - else: - outputs.append(tmpfile) - print("******* Success: ", r) - f = sys.stdout - if len(argv) >= 4: - f = open(argv[3], "w") - merge = os.path.join(os.path.dirname(argv[0]), "merge_data_flow.py") - subprocess.call([merge] + outputs, stdout=f) - -if __name__ == '__main__': - main(sys.argv) diff --git a/lib/fuzzer/scripts/merge_data_flow.py b/lib/fuzzer/scripts/merge_data_flow.py deleted file mode 100755 index 9f6901826..000000000 --- a/lib/fuzzer/scripts/merge_data_flow.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 -#===- lib/fuzzer/scripts/merge_data_flow.py ------------------------------===# -# -# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -# See https://llvm.org/LICENSE.txt for license information. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -# -#===------------------------------------------------------------------------===# -# Merge several data flow traces into one. -# Usage: -# merge_data_flow.py trace1 trace2 ... > result -#===------------------------------------------------------------------------===# -import sys -import fileinput -from array import array - -def Merge(a, b): - res = array('b') - for i in range(0, len(a)): - res.append(ord('1' if a[i] == '1' or b[i] == '1' else '0')) - return res.tostring().decode('utf-8') - -def main(argv): - D = {} - C = {} - # read the lines. - for line in fileinput.input(): - # collect the coverage. - if line.startswith('C'): - COV = line.strip().split(' ') - F = COV[0]; - if not F in C: - C[F] = {0} - for B in COV[1:]: - C[F].add(int(B)) - continue - # collect the data flow trace. - [F,BV] = line.strip().split(' ') - if F in D: - D[F] = Merge(D[F], BV) - else: - D[F] = BV; - # print the combined data flow trace. - for F in D.keys(): - if isinstance(D[F], str): - value = D[F] - else: - value = D[F].decode('utf-8') - print("%s %s" % (F, value)) - # print the combined coverage - for F in C.keys(): - print("%s" % F, end="") - for B in list(C[F])[1:]: - print(" %s" % B, end="") - print() - -if __name__ == '__main__': - main(sys.argv) |
