1
2import sys
3import os
4import time
5
6import angr
7from angr import options as so
8
9test_location = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', '..')
10
11def perf_unicorn_0():
12    p = angr.Project(os.path.join(test_location, 'binaries', 'tests', 'x86_64', 'perf_unicorn_0'))
13
14    s_unicorn = p.factory.entry_state(add_options=so.unicorn | {so.STRICT_PAGE_ACCESS}, remove_options={so.LAZY_SOLVES}) # unicorn
15
16    sm_unicorn = p.factory.simulation_manager(s_unicorn)
17
18    start = time.time()
19    sm_unicorn.run()
20    elapsed = time.time() - start
21
22    print("Elapsed %f sec" % elapsed)
23    print(sm_unicorn.one_deadended)
24
25def perf_unicorn_1():
26    p = angr.Project(os.path.join(test_location, 'binaries', 'tests', 'x86_64', 'perf_unicorn_1'))
27
28    s_unicorn = p.factory.entry_state(add_options=so.unicorn | {so.STRICT_PAGE_ACCESS}, remove_options={so.LAZY_SOLVES}) # unicorn
29
30    sm_unicorn = p.factory.simulation_manager(s_unicorn)
31
32    start = time.time()
33    sm_unicorn.run()
34    elapsed = time.time() - start
35
36    print("Elapsed %f sec" % elapsed)
37    print(sm_unicorn.one_deadended)
38
39if __name__ == "__main__":
40    if len(sys.argv) > 1:
41        for arg in sys.argv[1:]:
42            print('perf_' + arg)
43            globals()['perf_' + arg]()
44
45    else:
46        for fk, fv in globals().items():
47            if fk.startswith('perf_') and callable(fv):
48                print(fk)
49                res = fv()
50