mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
117 lines
3.5 KiB
Plaintext
117 lines
3.5 KiB
Plaintext
{
|
|
{
|
|
mstore(0x40, memoryguard(128))
|
|
sstore(g(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16), f())
|
|
}
|
|
function g(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16) -> v {
|
|
// Should be, but cannot yet be escalated.
|
|
v := b16
|
|
}
|
|
function f() -> v{
|
|
let a1 := calldataload(mul(1,4))
|
|
let a2 := calldataload(mul(2,4))
|
|
let a3 := calldataload(mul(3,4))
|
|
let a4 := calldataload(mul(4,4))
|
|
let a5 := calldataload(mul(5,4))
|
|
let a6 := calldataload(mul(6,4))
|
|
let a7 := calldataload(mul(7,4))
|
|
let a8 := calldataload(mul(8,4))
|
|
let a9 := calldataload(mul(9,4))
|
|
a1 := calldataload(mul(0,4))
|
|
let a10 := calldataload(mul(10,4))
|
|
let a11 := calldataload(mul(11,4))
|
|
let a12 := calldataload(mul(12,4))
|
|
let a13 := calldataload(mul(13,4))
|
|
let a14 := calldataload(mul(14,4))
|
|
let a15 := calldataload(mul(15,4))
|
|
let a16 := calldataload(mul(16,4))
|
|
let a17 := calldataload(mul(17,4))
|
|
sstore(0, a1)
|
|
sstore(mul(17,4), a17)
|
|
sstore(mul(16,4), a16)
|
|
sstore(mul(15,4), a15)
|
|
sstore(mul(14,4), a14)
|
|
sstore(mul(13,4), a13)
|
|
sstore(mul(12,4), a12)
|
|
sstore(mul(11,4), a11)
|
|
sstore(mul(10,4), a10)
|
|
sstore(mul(9,4), a9)
|
|
sstore(mul(8,4), a8)
|
|
sstore(mul(7,4), a7)
|
|
sstore(mul(6,4), a6)
|
|
sstore(mul(5,4), a5)
|
|
sstore(mul(4,4), a4)
|
|
sstore(mul(3,4), a3)
|
|
sstore(mul(2,4), a2)
|
|
sstore(mul(1,4), a1)
|
|
}
|
|
}
|
|
// ----
|
|
// step: stackLimitEvader
|
|
//
|
|
// {
|
|
// {
|
|
// mstore(0x40, memoryguard(0xa0))
|
|
// let _3 := f()
|
|
// let _4 := 16
|
|
// let _5 := 15
|
|
// let _6 := 14
|
|
// let _7 := 13
|
|
// let _8 := 12
|
|
// let _9 := 11
|
|
// let _10 := 10
|
|
// let _11 := 9
|
|
// let _12 := 8
|
|
// let _13 := 7
|
|
// let _14 := 6
|
|
// let _15 := 5
|
|
// let _16 := 4
|
|
// let _17 := 3
|
|
// let _18 := 2
|
|
// let _19 := 1
|
|
// mstore(0x80, _4)
|
|
// sstore(g(_19, _18, _17, _16, _15, _14, _13, _12, _11, _10, _9, _8, _7, _6, _5), _3)
|
|
// }
|
|
// function g(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15) -> v
|
|
// { v := mload(0x80) }
|
|
// function f() -> v_1
|
|
// {
|
|
// mstore(0x80, calldataload(mul(1, 4)))
|
|
// let a2 := calldataload(mul(2, 4))
|
|
// let a3 := calldataload(mul(3, 4))
|
|
// let a4 := calldataload(mul(4, 4))
|
|
// let a5 := calldataload(mul(5, 4))
|
|
// let a6 := calldataload(mul(6, 4))
|
|
// let a7 := calldataload(mul(7, 4))
|
|
// let a8 := calldataload(mul(8, 4))
|
|
// let a9 := calldataload(mul(9, 4))
|
|
// mstore(0x80, calldataload(mul(0, 4)))
|
|
// let a10 := calldataload(mul(10, 4))
|
|
// let a11 := calldataload(mul(11, 4))
|
|
// let a12 := calldataload(mul(12, 4))
|
|
// let a13 := calldataload(mul(13, 4))
|
|
// let a14 := calldataload(mul(14, 4))
|
|
// let a15 := calldataload(mul(15, 4))
|
|
// let a16 := calldataload(mul(16, 4))
|
|
// let a17 := calldataload(mul(17, 4))
|
|
// sstore(0, mload(0x80))
|
|
// sstore(mul(17, 4), a17)
|
|
// sstore(mul(16, 4), a16)
|
|
// sstore(mul(15, 4), a15)
|
|
// sstore(mul(14, 4), a14)
|
|
// sstore(mul(13, 4), a13)
|
|
// sstore(mul(12, 4), a12)
|
|
// sstore(mul(11, 4), a11)
|
|
// sstore(mul(10, 4), a10)
|
|
// sstore(mul(9, 4), a9)
|
|
// sstore(mul(8, 4), a8)
|
|
// sstore(mul(7, 4), a7)
|
|
// sstore(mul(6, 4), a6)
|
|
// sstore(mul(5, 4), a5)
|
|
// sstore(mul(4, 4), a4)
|
|
// sstore(mul(3, 4), a3)
|
|
// sstore(mul(2, 4), a2)
|
|
// sstore(mul(1, 4), mload(0x80))
|
|
// }
|
|
// }
|