破解以太坊 EVM 谜题8

破解以太坊 EVM 谜题8

通过以太坊 EVM 谜题深入学习 EVM,了解 EVM 可以帮助我们写出更高效的代码。

学习Solidity 的同学,欢迎订阅我的另一个专栏Ethernaut 题库闯关, 了解常用的 Hacker 方法,可以帮助我们写出更安全的代码。

articles-2022-10-neKkkmze6341450631c18.jpg

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操作码是一个系列,从SWAP1SWAP16
  • GAS: 在此操作后将交易中剩余的Gas推入堆栈。GAS操作也要花费Gas :D (2 gas)
  • CALL: 创建一个新的子上下文(据我所知,每个与 "外部"交互的操作都会创建一个新的上下文)并执行外部账户中的代码。如果调用回退了,操作码推送到堆栈中为0,否则为1。在执行之后,它保持正常的流程。注意:如果被调用的账户没有代码,它将返回成功的 "true"。Call操作码从堆栈中弹出7个元素,在执行时作为参数使用。
    • gas: 发送给为执行而创建的子环境的...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Ethernaut CTF
Ethernaut CTF
信奉 CODE IS LAW.