| Crates.io | evmil |
| lib.rs | evmil |
| version | 0.4.12 |
| created_at | 2022-09-03 02:39:14.273764+00 |
| updated_at | 2024-10-17 14:42:27.746128+00 |
| description | An low-level immediate language for compiling to EVM bytecode |
| homepage | |
| repository | https://github.com/DavePearce/EvmIL |
| max_upload_size | |
| id | 657708 |
| size | 399,108 |
This is a library and tool for working with EVM bytecode. The tool allows you to disassemble contracts into assembly language, and assemble them back again. The tool also supports a primitive intermediate language which can be compiled into bytecode.
To illustrate the tool, we will first disassemble the bytecode
contract 0x60006000511161000f5760016000525b. We can do this as
follows:
evmil disassemble --code 0x60006000511161000f5760016000525b
This should produce the following output:
.code
push 0x00
push 0x00
mload
gt
push 0x000f
jumpi
push 0x01
push 0x00
mstore
_0x000f:
jumpdest
If we store this into a file test.asm, we can then assemble it back
as follows:
evmil assemble test.asm
And we should see our original bytecode being output:
0x60006000511161000f5760016000525b
Finally, when writing assembly language we can use labels for simplicity. For example, the above could be rewritten as follows:
.code
push 0x00
push 0x00
mload
gt
push lab
jumpi
push 0x01
push 0x00
mstore
lab:
jumpdest
This just makes writing the assembly language a bit easier.