See https://github.com/angr/angr/pull/1092 for more details.
* The initial commit.
* Redo the lifting logic to avoid redundant IRSB copying.
* Move get_defaultexit_target() from Python to C to speed things up.
* Add a check to make sure LibVEX_Lift() does not return NULL.
* Implement IRSB.instruction_addresses.
* Implement IRSB.has_statements.
* Fix IRSB.addr.
* Fix a NULL-deref in pyvex.c.
* Postprocessor: Do not remove NoOp statements.
Otherwise it will cause a mismatch between statement indices and the
indices in IRSB.exit_statements (which are generated in PyVEX C).
* FixesPostProcessor: Get the IRSB address correctly.
* Remove NoOp statements in the C world.
* Restore the IRSB size calculation.
* Make sure exit_statements is not None before accessing.
* Enable tests for PyVEX itself.
* Implement ARM call jumpkind fixer in C for a better performance.
* Implement MIPS32 post-processing in C world.
* Add a missing undefine.
* Fix test.py.
* Add stddef.h to pyvex.c.
* Implement data reference collection in pyvex_c.
* Lint the code.
* Expose PyVEXError.
* More linting.
* oops
* Expose get_type_size and get_type_spec_size.
* Expose IRTypeEnv.
* Postprocessor: Support NeedStatementsNotification.
* Reorganize lifting/__init__.py.
* Remove the IRSB.addr property, replace with raw attribute
* Make check against MAX_DATA_REFS more explicit
* Move from data ref tuples to a DataRef class
* Lint block.py: Define data_refs and _instruction_addresses in __init__
* Make pyvex.lift positional arguments match pyvex.IRSB
* The kosher way to do this is .lift()
* Split pyvex.c into several smaller C files
(committing as fish to preserve authorship)
* Lifter: Do not extend a basic block if the lifter intentionally ends it with a NoDecode.
The rationale behind is that we want to differentiate between NoDecode
that are caused by unsupported instructions and NoDecode caused by
decodeable instructions. For example, `ud2` is a valid instruction on X86
and AMD64, but it means "undefined instruction". On AMD64, VEX will create
a basic block that has an instruction of two bytes (which is the size of
the ud2 instruction), but with the `next` of the basic block pointing to
that instruction. In our existing implementation, we will ignore ud2 and
keep lifting, which is an incorrect behavior.
This commit will detect these intentional NoDecode cases. In such cases,
the Lifter will return a basic block that terminates after the
"undecodeable" instruction, with NoDecode as the jumpkind.
* Add a test case.
* Rename .lift to .lifting to avoid the lift() method shadowing the lift module.
* Tidy the code and make future development easier.
- Remove all absolute import of pyvex.
- Remove all absolute import of Python modules that should be relative
imports.
- Split lifting.__init__.py into separate files.
- Delay an import from angr to avoid circular import.
* Fix ARM post-processing function to determine jumpkind when 'lr' is affected
* Improve code readability in block.py
* Test case for ARM post-processing