BinaryAnalysisPlatform/bap — pull request #32 by ivg (2014-12-05 22:40:55+00:00)
Title: ARM lifting.

This PR adds ARM lifter, aka ARM disassembler.

The original disassembler was refactored into 13 separate modules with
clearly defined interfaces, so that we can later address the code.

The code is rewritten against new `Bap_types.Std`, all reference to Z
are removed, and all bit-logic is performed with bitvectors.

Polymorphic variants are used to represent instruction opcodes. That
allows us to perform matching on instruction classes. Thanks to that,
lifter was split into several functions.

All data types, like registers and instructions are now written
manually, and only the supported set of values are represented. No more,
thousands of instructions.

Lifter is quite fast, about 50 us per instruction. Although, I didn't
made any optimizations, and there are plenty of opportunities for doing
it.

What concering correctness, in all coreutils we have about 1% of unknown
instructions and 1% of lifting failures (all in one place - wrong
argument type of the offset operand, an issue will be created soon).

Also, I've slightly fixed BIL typesystem, since my last edition was to
strict and doesn't allow many valid BIL programs.