破解以太坊 EVM 谜题8
学习Solidity 的同学,欢迎订阅我的另一个专栏[Ethernaut 题库闯关](https://learnblockchain.cn/column/19), 了解常用的 Hacker 方法,可以帮助我们写出更安全的代码。

## EVM 谜题8
“`bash
00 36 CALLDATASIZE
01 6000 PUSH1 00
03 80 DUP1
04 37 CALLDATACOPY
05 36 CALLDATASIZE
06 6000 PUSH1 00
08 6000 PUSH1 00
0A F0 CREATE
0B 6000 PUSH1 00
0D 80 DUP1
0E 80 DUP1
0F 80 DUP1
10 80 DUP1
11 94 SWAP5
12 5A GAS
13 F1 CALL
14 6000 PUSH1 00
16 14 EQ
17 601B PUSH1 1B
19 57 JUMPI
1A FD REVERT
1B 5B JUMPDEST
1C 00 STOP
“`
以上是 EVM 谜题 8 的操作码,和 [谜题 7](https://learnblockchain.cn/article/4900) 类似,但是有一些小的不同。
让我们回顾一下每个新的操作码,并尝试将所有的东西分成几部分。
– [SWAP5](https://www.evm.codes/#94):这个操作码将位置0的操作码与位置5的操作码互换。SWAP操作码是一个系列,从`SWAP1`到`SWAP16`。
– [GAS](https://www.evm.codes/#5a): 在此操作后将交易中剩余的Gas推入堆栈。`GAS`操作也要花费Gas :D (2 gas)
– [CALL](https://www.evm.codes/#f1): 创建一个新的子上下文(据我所知,每个与 “外部”交互的操作都会创建一个新的上下文)并执行外部账户中的代码。如果调用回退了,操作码推送到堆栈中为0,否则为1。在执行之后,它保持正常的流程。**注意:**如果被调用的账户没有代码,它将返回成功的 “true”。Call操作码从堆栈中弹出7个元素,在执行时作为参数使用。
– `gas`: 发送给为执行而创建的子环境的…
通过以太坊 EVM 谜题深入学习 EVM,了解 EVM 可以帮助我们写出更高效的代码。
学习Solidity 的同学,欢迎订阅我的另一个专栏Ethernaut 题库闯关, 了解常用的 Hacker 方法,可以帮助我们写出更安全的代码。
EVM 谜题8
00 36 CALLDATASIZE
01 6000 PUSH1 00
03 80 DUP1
04 37 CALLDATACOPY
05 36 CALLDATASIZE
06 6000 PUSH1 00
08 6000 PUSH1 00
0A F0 CREATE
0B 6000 PUSH1 00
0D 80 DUP1
0E 80 DUP1
0F 80 DUP1
10 80 DUP1
11 94 SWAP5
12 5A GAS
13 F1 CALL
14 6000 PUSH1 00
16 14 EQ
17 601B PUSH1 1B
19 57 JUMPI
1A FD REVERT
1B 5B JUMPDEST
1C 00 STOP
以上是 EVM 谜题 8 的操作码,和 谜题 7 类似,但是有一些小的不同。
让我们回顾一下每个新的操作码,并尝试将所有的东西分成几部分。
- SWAP5:这个操作码将位置0的操作码与位置5的操作码互换。SWAP操作码是一个系列,从
SWAP1
到SWAP16
。 - GAS: 在此操作后将交易中剩余的Gas推入堆栈。
GAS
操作也要花费Gas 😀 (2 gas) - CALL: 创建一个新的子上下文(据我所知,每个与 “外部”交互的操作都会创建一个新的上下文)并执行外部账户中的代码。如果调用回退了,操作码推送到堆栈中为0,否则为1。在执行之后,它保持正常的流程。注意:如果被调用的账户没有代码,它将返回成功的 “true”。Call操作码从堆栈中弹出7个元素,在执行时作为参数使用。
gas
: 发送给为执行而创建的子环境的…
剩余50%的内容订阅专栏后可查看
- 发表于 2022-10-21 18:05
- 阅读 ( 161 )
- 学分 ( 0 )
- 分类:智能合约
- 专栏:以太坊 EVM 谜题破解