破解以太坊 EVM 谜题5
通过以太坊EVM谜题深入学习EVM。
![articles-2022-10-neKkkmze6341450631c18.jpg](https://img.learnblockchain.cn/attachments/2022/10/ysD1oobT63477f8e2cf9c.jpg!/scale/70)
## EVM 谜题5
```bash
00 34 CALLVALUE
01 80 DUP1
02 02 MUL
03 610100 PUSH2 0100
06 14 EQ
07 600C PUSH1 0C
09 57 JUMPI
0A FD REVERT
0B FD REVERT
0C 5B JUMPDEST
0D 00 STOP
0E FD REVERT
0F FD REVERT
```
以上是 EVM 谜题 5 合约的操作码,它前面的谜题有些不同类似, 没有了 JUMP 操作码,而是使用了 [JUMPI](https://www.evm.codes/#57)。
**JUMPI**指令可以改变程序计数器,从而打破了执行的线性路径, 调转到部署[代码](https://www.evm.codes/about)中的另一点。它被用来实现循环和条件判断等功能。
当 "JUMPI "被执行时,它从堆栈中弹出两个值。第一个值是要跳转到的新的程序计数器(像往常一样,它必须是一个有效的`JUMPDEST`指令)。第二个值是一个布尔标志(0或1),用来判断它是否必须跳转。如果值为1,它将跳转;否则它将继续下一条指令。
让我们回顾一下`JUMPI`之前的每个操作码:
- `CALLVALUE`在堆栈中推入发送交易的`msg.value` (以`wei`为单位)
- [DUP1](https://www.evm.codes/#80): 复制堆栈中的第一个值并将其推到堆栈的第一个位置
- [MUL](https://www.evm.codes/#02): 弹出堆栈中的前两个值并将它们相乘。其结果被推回栈中
- [PUSH2](https://www.evm.codes/#61):将2个字节的输...
通过以太坊 EVM 谜题深入学习 EVM。
EVM 谜题5
00 34 CALLVALUE
01 80 DUP1
02 02 MUL
03 610100 PUSH2 0100
06 14 EQ
07 600C PUSH1 0C
09 57 JUMPI
0A FD REVERT
0B FD REVERT
0C 5B JUMPDEST
0D 00 STOP
0E FD REVERT
0F FD REVERT
以上是 EVM 谜题 5 合约的操作码,它前面的谜题有些不同类似, 没有了 JUMP 操作码,而是使用了 JUMPI。
JUMPI指令可以改变程序计数器,从而打破了执行的线性路径, 调转到部署代码中的另一点。它被用来实现循环和条件判断等功能。
当 "JUMPI "被执行时,它从堆栈中弹出两个值。第一个值是要跳转到的新的程序计数器(像往常一样,它必须是一个有效的JUMPDEST
指令)。第二个值是一个布尔标志(0或1),用来判断它是否必须跳转。如果值为1,它将跳转;否则它将继续下一条指令。
让我们回顾一下JUMPI
之前的每个操作码:
CALLVALUE
在堆栈中推入发送交易的msg.value
(以wei
为单位)- DUP1: 复制堆栈中的第一个值并将其推到堆栈的第一个位置
- MUL: 弹出堆栈中的前两个值并将它们相乘。其结果被推回栈中
- PUSH2:将2个字节的输...
剩余50%的内容订阅专栏后可查看
- 发表于 2022-10-12 19:21
- 阅读 ( 180 )
- 学分 ( 0 )
- 分类:智能合约
- 专栏:以太坊 EVM 谜题破解
评论