#assembly #push #bytecode #language #evm #assemble #intermediate

bin+lib evmil

一种用于编译到EVM字节的低级即时语言

25个版本

0.4.6 2024年5月8日
0.4.5 2023年10月26日
0.4.0 2023年9月19日
0.3.3 2023年9月11日
0.1.0 2022年9月3日

#74 in 魔法豆

Download history 157/week @ 2024-05-03 24/week @ 2024-05-10 7/week @ 2024-05-17 1/week @ 2024-05-24 13/week @ 2024-07-05 61/week @ 2024-07-26 10/week @ 2024-08-02

71 每月下载量

MIT/Apache

390KB
7.5K SLoC

Rust 5.5K SLoC // 0.2% comments Assembly 2K SLoC // 0.5% comments Shell 6 SLoC

概述

这是一个用于处理EVM字节码的库和工具。该工具允许您将合约反汇编成汇编语言,并将其重新汇编。该工具还支持一种原始的中间语言,可以编译成字节码。

汇编器/反汇编器

为了说明这个工具,我们首先将字节码合约0x60006000511161000f5760016000525b进行反汇编。我们可以这样做:

evmil disassemble --code 0x60006000511161000f5760016000525b

这应该会产生以下输出:

.code
        push 0x00
        push 0x00
        mload
        gt
        push 0x000f
        jumpi
        push 0x01
        push 0x00
        mstore
_0x000f:
        jumpdest

如果我们将它保存到文件test.asm中,然后我们可以按照以下方式将其重新汇编:

evmil assemble test.asm

我们应该看到原始的字节码输出。

0x60006000511161000f5760016000525b

最后,在编写汇编语言时,我们可以使用标签来简化。例如,上面的代码可以重写如下:

.code
        push 0x00
        push 0x00
        mload
        gt
        push lab
        jumpi
        push 0x01
        push 0x00
        mstore
lab:
        jumpdest

这仅仅让编写汇编语言变得更容易。

依赖项

~4MB
~81K SLoC