* begin refactoring logging to use manticore object
* fix verbosity things
* fix logging when in scripts
* remove m.log_file now that it's no longer used
* remove unnecessary init_logging usage and unused log_debug variable
* accidentally deleted the wrong line
* re-hide init_logging
* remove old log_debug
* remove unnecessary API stuff and refactor around that
* re-introduce logging PR
* fix Popen
* lost a line in merge
* fix test_binaries
* Log to stdout instead of stderr
* implement mark's changes
* Configure Z3 depending on installed version
* Mocking for subprocess.check_output
* change get_value_fmt to private attribute _get_value_fmt
* Move memoized to utils
* Remove minimal version and simplify
* Re-add invalid versions/sanity checks
* Z3 version format checked on github
* New tests. Version is future proof
* Better logging
* Enable simple ARM register concretization for Unicorn
* Add canonical_registers property to abstractcpu
* cpu to self
* Check for regs_access better
* Emulate a single instruction
* Bypass capstone 3.0.4 arm bug
* Dealing with capstone
* Temporary disable ASR and remobe BitVec.Bool from test
* WIP WIP debug prints WIP WIP
* Unicorn fallback working (using unicorn master)
* HAck to support unicorn 1.0.0
* WIP
* Unicorn hack to handle PC updates
* [WIP] do not do anything with this commit; for debugging only
* Adding before clean up
* emulation more or less works; need to work out more unicorn bugs
* clean up emulate() caller code
* move hooks to methods; cleanup
* Concretize memory when emulating
* Re-add Bool()
* Update tests to start at offset 4
When an instruction branches to the previous instruction,
Unicorn attempts to dereference that memory. We'd like to use
unit tests to also make sure Unicorn emulation is in line with
our own semantics. If we start all tests at offset 4, we can
jump to a previous instruction and not fault when Unicorn
dereferences it.
* Fix concretization
* Clean up test imports; upper-case Cpu
* Unicorn tests
* Add tests for all the ARM semantics, but make sure they're equivalent
on unicorn.
* Add a few tests to make sure unicorn correctly concretizes the memory
it references
* Fix broken import
* Add symbolic register tests
* Re-introduce the unicorn hack
* Add the 'ONE' concretization policy
* Rm unused function
* Update concretization; add comments
* Add ONE policy test
* Create a base class for all concretization exceptions
* Remove Armv7Cpu._concretize_registers
* Check for enabled logging in a more idiomatic way
* [wip] intermediate testing commit
* Reimplement hooks and execution with unicorn
* Add a DMB (mem barrier) instruction; nop
* simplify instruction resolution
* improve unicorn error handling
* explicitly delete emu
* Handle ARM helpers inline
* map fetched memory
* Narrow exception handling
* Update DMB docs; make __kuser_dmb match real implementation
* Fix typo; add comment; remove extraneous parameter
* typos++
* Fix interpreter load
* turn off some debug
* cuack
* Correct loader condition (#111)
* Rm unnecessary condition
We always want to run this code if there is an interpreter present, not
just if the exe is ET_DYN
* Add correct interp header type check
* no-mp not uset and redundant
* Add timeout
* Unused args reremoved timeout readded
* no-mp not uset and redundant
* Add timeout
* Unused args reremoved timeout readded
* Move import to the top op op op
* add basic benchmarking script
* add results class, collect more information, and fix check for no args
* fix indentation
* we don't have logger here
* use argv[0] for name of program
* allow dumping of stats from the API and use .format()
* add ProfilingResults class
* bugfixes
* Re enable skipped test
* Re enable skipped test
* Hack so we can use upstream Elftool
* pr comments
* pr comments - staticmethod
* pr comments - implicit > explicit
* RegisterFile refactor everywhere
* Update arm_rf tests
* Refactor Operand in both x86 and arm
* Add APSR support (#53)
* Add APSR support
* #issuecomment-284826572
* APSR tests
* cspr to aspr
* RegisterFile refactor everywhere
* Update arm_rf tests
* Refactor Operand in both x86 and arm
* Rebased and NotImplementedError fix
* ARM register initialization compressed
* Fix merging bugs
* Assimilate PR comments
* Assimilate PR comments2
* The new style. future is now
* WIP
* Improve quick start ,add asciinema (#58)
* Towards a helloworld world
* Rm requirements.txt (#56)
* Print workspace dir by default (#55)
* Print workspace dir by default
* Change initial cli output
* refactor or or or
* WIP
* Add arm rf testcase
* ARM aliases fix
* debug print removed
* fix tests
* Remove unicorn script from travis build (#64)
* remove unicorn script from travis build
* remove unicorn script entirely
* Rename test -> tests (#66)
* rename test -> tests
* re-add ignored tests
* Switch instructions to prefer virtualenv (#65)
* switch instructions to prefer virtualenv
* document use of virtualenvwrapper
* Make cpuid more forgiving (#67)
* Make cpuid more forgiving
* error() to warning()
* Add CPUID EAX=0xd ECX=0,1
* Let logger handle the format string iff needed
* to hex
* Rm unused files (#76)
* Move state into own file (#75)
* Move State from executor.py
* Fix import
* relative import
* Rm unnecessary code (#80)
* Add example crackme (#77)
* add example crackme
* make filename and directory structure more accurate
* Fix state.branches (#74)
* init
* rm old code
pretty sure it's wrong
* Clean
* rm
* Rename record_fork, move to ConcretizeRegister exception handler
It doesn't need to be in fork() because it's only relevant for when
we fork due to PC.
* Add test for record_branches
* Add back record_branches which got removed in rebase
Rebase went oddly because State got moved to a new file
* unnecesary tuple()
* necesary tuple
* remove unnecessary keys()
* Use OrderedDict (#84)
It can be useful to know elements in `branches` towards the end are
more recently discovered branches
* arm: Fix broken dynamic APSR (#78)
* Refactor Register (#82)
* Fix register read bug
If we store a BitVec, we do NOT want to return bool() of it, which
returns True, which is totally incorrect. We do however, want to return
a symbolic Bool of it, if it is a 1 bit register (flag).
* Improve
* Raise error
* Fix register tests
Changed the interfaces:
- removed nbits param (never used)
- no longer raise AssertionError when overflowing a flag reg, just
truncate
- rename test funcs to be more descriptive
* rm unused import
* Add symbolic tests
* Rm no longer applicable test
* Add docs (#61)
* Add sphinx-quickstart generated docs
* Add api.rst
* Edit index.rst
* Add autodocumenting Manticore class
* Update Manticore docstring
* Doc verbosity
* Doc hook and add_hook
* More docs
* Add Sphinx dev dep
For building docs
* RegisterFile refactor everywhere
* Update arm_rf tests
* Refactor Operand in both x86 and arm
* RegisterFile refactor everywhere
* Refactor Operand in both x86 and arm
* Rebased and NotImplementedError fix
* ARM register initialization compressed
* Fix merging bugs
* Assimilate PR comments
* Assimilate PR comments2
* The new style. future is now
* WIP
* Towards a helloworld world
* refactor or or or
* WIP
* Add arm rf testcase
* ARM aliases fix
* debug print removed
* fix tests
* unnecesary tuple()
* necesary tuple
* remove unnecessary keys()
* rebased
* Remove test
* https://github.com/trailofbits/manticore/pull/57#pullrequestreview-27971778
* https://github.com/trailofbits/manticore/pull/57#discussion_r107820815, https://github.com/trailofbits/manticore/pull/57#discussion_r107820331
* https://github.com/trailofbits/manticore/pull/57#discussion_r107821090
* https://github.com/trailofbits/manticore/pull/57#discussion_r107821066
* https://github.com/trailofbits/manticore/pull/57#discussion_r107821919
* OOps search and replace
* (invalid) -> None
* The (invalid) -> None
* None vs. invalid
* In armpy we know that STACK is SP so lets try to eliminate cpu.STACK in favor of x.SP
* remove ugly hex
* Removed redundant import and comment
* Fix register read bug
If we store a BitVec, we do NOT want to return bool() of it, which
returns True, which is totally incorrect. We do however, want to return
a symbolic Bool of it, if it is a 1 bit register (flag).
* Improve
* Raise error
* Fix register tests
Changed the interfaces:
- removed nbits param (never used)
- no longer raise AssertionError when overflowing a flag reg, just
truncate
- rename test funcs to be more descriptive
* rm unused import
* Add symbolic tests
* Rm no longer applicable test
* init
* rm old code
pretty sure it's wrong
* Clean
* rm
* Rename record_fork, move to ConcretizeRegister exception handler
It doesn't need to be in fork() because it's only relevant for when
we fork due to PC.
* Add test for record_branches
* Add back record_branches which got removed in rebase
Rebase went oddly because State got moved to a new file