Adds concrete codecopy test

pull/379/head
Joran Honig 6 years ago
parent 98e50fb64a
commit 534e2f7cc0
  1. 2
      mythril/laser/ethereum/instructions.py
  2. 0
      tests/instructions/__init__.py
  3. 20
      tests/instructions/codecopy_test.py

@ -549,7 +549,7 @@ class Instruction:
for i in range(concrete_size): for i in range(concrete_size):
try: try:
global_state.mstate.memory[concrete_memory_offset + i] =\ global_state.mstate.memory[concrete_memory_offset + i] =\
int(bytecode[concrete_code_offset + i: concrete_code_offset + i + 2], 16) int(bytecode[2*(concrete_code_offset + i): 2*(concrete_code_offset + i + 1)], 16)
except IndexError: except IndexError:
global_state.mstate.memory[concrete_memory_offset + i] = \ global_state.mstate.memory[concrete_memory_offset + i] = \
BitVec("code({})".format(global_state.environment.active_account.contract_name), 256) BitVec("code({})".format(global_state.environment.active_account.contract_name), 256)

@ -0,0 +1,20 @@
from mythril.disassembler.disassembly import Disassembly
from mythril.laser.ethereum.state import MachineState, GlobalState, Environment, Account
from mythril.laser.ethereum.instructions import Instruction
def test_codecopy_concrete():
# Arrange
active_account = Account("0x0", code= Disassembly("60606040"))
environment = Environment(active_account, None, None, None, None, None)
og_state = GlobalState(None, environment, None, MachineState(gas=10000000))
og_state.mstate.stack = [2, 2, 2]
instruction = Instruction("codecopy", dynamic_loader=None)
# Act
new_state = instruction.evaluate(og_state)[0]
# Assert
assert new_state.mstate.memory[2] == 96
assert new_state.mstate.memory[3] == 64
Loading…
Cancel
Save