破解以太坊 EVM 谜题5

通过以太坊EVM谜题深入学习EVM。

通过以太坊 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 谜题破解

评论