anvill
anvill copied to clipboard
anvill forges beautiful LLVM bitcode out of raw machine code
We want to be able to mark certain instructions and stack locations with attributes. While talking with Peter he suggested that these two features might be useful to start -...
Go through Anvill code and document, at a high level, what it should be doing & why, to capture the information somewhere in written form.
The anvill python should provide version information via `--version`. This version should look like the version information for the C++ code. Specifically, to output the latest git commit hash.
Use something like: * https://github.com/brenocfg/AnghaBench * http://www.vectorization.computer/index.html to have extensive single-function tests. These will match similar tests in Rellic.
Using binja, we're sometimes missing type information for global variables. In this case binja assigns them a `VoidType`. When creating a JSON spec, Anvill translates this into a 1-byte byte...
Right now varargs functions are detected as varargs, but we only emit the formal but not variable parameters. As an example, we see: ``` unsigned int printf(unsigned char *arg0, ...);...
It may be difficult to remember which bitcode goes with which anvill. Lets track the bitcode generator via a debug annotation or comments in the bitcode. This should emit the...
Sometimes we generate bitcode that does not pass verifier. As a sanity check, lets ensure that we can always disassemble the bitocode via `llvm-dis` as a part of our test...
If the CI test runner fails, it should print out the failing JSON spec to help with debugging.
When using `DataLayout::getStuctLayout` to figure out how to load/store a structure in memory, we assume that the order of types in the LLVM type is representative of the order of...