Skip to content

Ethereum detectors will fail if pc is symbolic #1394

@ESultanik

Description

@ESultanik

Detector.add_finding should simplify pc to try and concretize it before checking if it is symbolic.

2019-03-28 09:21:03,654: [68966] m.e.manticore:INFO: Starting symbolic create contract
2019-03-28 09:21:20,150: [68966] m.c.executor:ERROR: Exception: PC must be a number
Traceback (most recent call last):
  File "/manticore/manticore/core/executor.py", line 454, in run
    if not current_state.execute():
  File "/manticore/manticore/ethereum/state.py", line 6, in execute
    return self._platform.execute()
  File "/manticore/manticore/platforms/evm.py", line 2369, in execute
    self.current_vm.execute()
  File "/manticore/manticore/platforms/evm.py", line 1032, in execute
    self._advance(result)
  File "/manticore/manticore/platforms/evm.py", line 989, in _advance
    self._publish('did_evm_execute_instruction', last_instruction, last_arguments, result)
  File "/manticore/manticore/utils/event.py", line 127, in _publish
    self._publish_impl(_name, *args, **kwargs)
  File "/manticore/manticore/utils/event.py", line 144, in _publish_impl
    sink._publish_impl(_name, *args, **kwargs)
  File "/manticore/manticore/utils/event.py", line 144, in _publish_impl
    sink._publish_impl(_name, *args, **kwargs)
  File "/manticore/manticore/utils/event.py", line 142, in _publish_impl
    sink._publish_impl(_name, self, *args, **kwargs)
  File "/manticore/manticore/utils/event.py", line 144, in _publish_impl
    sink._publish_impl(_name, *args, **kwargs)
  File "/manticore/manticore/utils/event.py", line 135, in _publish_impl
    callback(robj(), *args, **kwargs)
  File "/manticore/manticore/ethereum/detectors.py", line 481, in did_evm_execute_instruction_callback
    self._check_finding(state, what)
  File "/manticore/manticore/ethereum/detectors.py", line 461, in _check_finding
    self.add_finding(state, address, pc, finding, at_init)
  File "/manticore/manticore/ethereum/detectors.py", line 61, in add_finding
    raise ValueError("PC must be a number")
ValueError: PC must be a number

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions