Extend memory beyond 32 byte addresses in interpreter.

This commit is contained in:
chriseth 2019-09-04 13:20:56 +02:00
parent 1fd744c777
commit 5b4b4011c7
2 changed files with 20 additions and 7 deletions

View File

@ -0,0 +1,14 @@
{
mstore(0, 7)
sstore(0, mload(0))
mstore(sub(0, 1), sub(0, 1))
sstore(1, mload(sub(0, 1)))
}
// ----
// Trace:
// Memory dump:
// 0: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff07
// FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0: 00000000000000000000000000000000000000000000000000000000000000ff
// Storage dump:
// 0000000000000000000000000000000000000000000000000000000000000000: 0000000000000000000000000000000000000000000000000000000000000007
// 0000000000000000000000000000000000000000000000000000000000000001: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

View File

@ -248,16 +248,15 @@ u256 EVMInstructionInterpreter::eval(
return m_state.gaslimit;
// --------------- memory / storage / logs ---------------
case Instruction::MLOAD:
if (accessMemory(arg[0], 0x20))
return readMemoryWord(arg[0]);
return 0;
accessMemory(arg[0], 0x20);
return readMemoryWord(arg[0]);
case Instruction::MSTORE:
if (accessMemory(arg[0], 0x20))
writeMemoryWord(arg[0], arg[1]);
accessMemory(arg[0], 0x20);
writeMemoryWord(arg[0], arg[1]);
return 0;
case Instruction::MSTORE8:
if (accessMemory(arg[0], 1))
m_state.memory[arg[0]] = uint8_t(arg[1] & 0xff);
accessMemory(arg[0], 1);
m_state.memory[arg[0]] = uint8_t(arg[1] & 0xff);
return 0;
case Instruction::SLOAD:
return m_state.storage[h256(arg[0])];