Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/crytic/pyevmasm
Ethereum Virtual Machine (EVM) disassembler and assembler
https://github.com/crytic/pyevmasm
assembler dissassembler ethereum evm python
Last synced: 19 minutes ago
JSON representation
Ethereum Virtual Machine (EVM) disassembler and assembler
- Host: GitHub
- URL: https://github.com/crytic/pyevmasm
- Owner: crytic
- License: apache-2.0
- Created: 2018-06-20T14:21:51.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-04-03T07:11:42.000Z (9 months ago)
- Last Synced: 2024-05-21T09:14:14.033Z (8 months ago)
- Topics: assembler, dissassembler, ethereum, evm, python
- Language: Python
- Size: 137 KB
- Stars: 344
- Watchers: 25
- Forks: 49
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- Library-of-Ethereum - Pyevmasm - pyevmasm is an assembler and disassembler library for the Ethereum Virtual Machine (EVM). (EVM / Cairo)
- awesome-web3-tools-and-dapps - Python EVM Assembler - The EVM disassembler and assembler is a tool for interpreting and creating Ethereum Virtual Machine code. (dApps directory / Assemblers)
README
# pyevmasm
[![Build Status](https://github.com/crytic/pyevmasm/workflows/CI/badge.svg)](https://github.com/crytic/pyevmasm/actions?query=workflow%3ACI)[![PyPI version](https://badge.fury.io/py/pyevmasm.svg)](https://badge.fury.io/py/pyevmasm)
[![Slack Status](https://slack.empirehacking.nyc/badge.svg)](https://slack.empirehacking.nyc)pyevmasm is an assembler and disassembler library for the Ethereum Virtual Machine (EVM). It includes a commandline utility and a Python API.
## CLI Examples with evmasm
`evmasm` is a commandline utility that uses pyevmasm to assemble or disassemble EVM:
```
usage: evmasm [-h] (-a | -d | -t) [-bi] [-bo] [-i [INPUT]] [-o [OUTPUT]] [-f FORK]pyevmasm the EVM assembler and disassembler
optional arguments:
-h, --help show this help message and exit
-a, --assemble Assemble EVM instructions to opcodes
-d, --disassemble Disassemble EVM to opcodes
-t, --print-opcode-table
List supported EVM opcodes
-bi, --binary-input Binary input mode (-d only)
-bo, --binary-output Binary output mode (-a only)
-i [INPUT], --input [INPUT]
Input file, default=stdin
-o [OUTPUT], --output [OUTPUT]
Output file, default=stdout
-f FORK, --fork FORK Fork, default: byzantium. Possible: frontier,
homestead, tangerine_whistle, spurious_dragon,
byzantium, constantinople, serenity. Also an unsigned
block number is accepted to select the fork.
```Disassembling the preamble of compiled contract:
```
$ echo -n "608060405260043610603f57600035" | evmasm -d
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x4
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH1 0x3f
0000000b: JUMPI
0000000c: PUSH1 0x0
0000000e: CALLDATALOAD
```## Python API Examples
```
>>> from pyevmasm import instruction_tables, disassemble_hex, disassemble_all, assemble_hex
>>> instruction_table = instruction_tables['byzantium']
>>> instruction_table[20]
Instruction(0x14, 'EQ', 0, 2, 1, 3, 'Equality comparision.', None, 0)
>>> instruction_table['EQ']
Instruction(0x14, 'EQ', 0, 2, 1, 3, 'Equality comparision.', None, 0)
>>> instrs = list(disassemble_all(binascii.unhexlify('608060405260043610603f57600035')))
>>> instrs.insert(1, instruction_table['JUMPI'])
>>> a = assemble_hex(instrs)
>>> a
'0x60805760405260043610603f57600035'
>>> print(disassemble_hex(a))
PUSH1 0x80
JUMPI
PUSH1 0x40
MSTORE
...
>>> assemble_hex('PUSH1 0x40\nMSTORE\n')
'0x604052'
```# Installation
Python >=2.7 or Python >=3.3 is required.
Install the latest stable version using pip:
```
pip install pyevmasm
```Or, install the library from source:
```
git clone https://github.com/trailofbits/pyevmasm
cd pyevmasm
python setup.py install --user
```## Documentation
[https://pyevmasm.readthedocs.io](https://pyevmasm.readthedocs.io)
New issues, feature requests, and contributions are welcome. Join us in #ethereum channel on the [Empire Hacking Slack](https://slack.empirehacking.nyc) to discuss Ethereum security tool development.