manticore/examples/evm/coverage.py
feliam 9c777e6d2b
EVM api refactor (#589)
* Fixes symbolic reentrancy example

* Fix coverage Issue# 527

* Remove  debug unused code

* New solidity biased API and reporting

* Updated examples to new api WIP

* simple_mapping FIXED. new api

* Simple transaction example added. msg.value can be symbolic now

* Reentrancy symbolic now updated to new API + bugfixes

* Doc and cleanups in evm assembler

* EVMInstruction -> Instruction

* cleanups

* typo

* deepcopy in Constant

* Better EVM-asm api and doc

* some docs

* More evm asm docs

* Initial seth in place refactor

* Fix import *

* typo

* newline between text and param

* similar phrasing to all the other flags

* typo

* typo

* fix function name in comment

* sphinx newline

* documentation fixes

* documentation fixes

* refactors

* EVMAssembler to EVMAsm

* Fix evm @hook signature

* EVMAsm

* WIP seth doc

* WIP move seth

* seth moved to manticore module

* Fixed DUP and typo

* Slightly better evm reporting

* review

* review

* Removed unfinished refactor
2017-11-29 19:00:49 -03:00

39 lines
1.2 KiB
Python

from manticore.seth import ManticoreEVM
seth = ManticoreEVM()
seth.verbosity(3)
#And now make the contract account to analyze
source_code = file('coverage.sol').read()
user_account = seth.create_account(balance=1000)
bytecode = seth.compile(source_code)
#Initialize contract
contract_account = seth.create_contract(owner=user_account,
balance=0,
init=bytecode)
seth.transaction( caller=user_account,
address=contract_account,
value=None,
data=seth.SByte(164),
)
#Up to here we get only ~30% coverage.
#We need 2 transactions to fully explore the contract
seth.transaction( caller=user_account,
address=contract_account,
value=None,
data=seth.SByte(164),
)
print "[+] There are %d reverted states now"% len(seth.final_state_ids)
print "[+] There are %d alive states now"% len(seth.running_state_ids)
for state_id in seth.running_state_ids:
seth.report(state_id)
print "[+] Global coverage: %x"% contract_account
print seth.coverage(contract_account)