-rw-r--r-- 2055 saferewrite-20210904/README
0. These instructions assume Debian or Ubuntu. Most of the examples of optimized code are for AVX2 (Haswell and newer) and won't run on other platforms. saferewrite automatically skips the implementations that don't run and analyzes the implementations that do. 1. First time, as root, install packages: apt install python3 virtualenvwrapper build-essential clang valgrind All subsequent steps are unprivileged. 2. First time, as user, create a saferewrite environment: mkvirtualenv -p /usr/bin/python3 saferewrite If this doesn't work, try running . /usr/share/virtualenvwrapper/virtualenvwrapper.sh first, or try a new shell. If your system has pypy3 then you can use that instead of python3 here, and run "pypy3 ./analyze &" below. This can save a considerable fraction of unrolling time but doesn't help for Z3 time, which is typically a bigger bottleneck. 3. First time, as user, install angr within the saferewrite environment: pip install angr 4. Subsequent times, as user, switch to the saferewrite environment: workon saferewrite If this doesn't work, try running . /usr/share/virtualenvwrapper/virtualenvwrapper.sh first, or try a new shell, as in step 3. 5. Optionally, in this directory, narrow the analysis to cmp* (or whichever subdirectories you're interested in under src): chmod +t src/* chmod -t src/cmp* 6. In this directory, analyze everything: ./analyze & This will put results in a ./build directory, wiping out any previous ./build results. The analysis automatically runs on as many cores as it can find. If you want to limit the number of cores: env CORES=1 ./analyze & If you want to interrupt the analysis and look at results so far, use SIGTERM (kill with default options) rather than SIGINT (^C). 7. Look at the analysis results: ls -1 build/*/*/*/analysis/* To see examples showing implementations are different: less build/*/*/*/analysis/*different* To see what the analysis thinks each implementation is doing: less build/*/*/*/analysis/unrolled