Skip to content

Commit 66b8b46

Browse files
authored
Merge pull request #5 from defunctio/refactor
release cleanup
2 parents 9434915 + 8c6368b commit 66b8b46

File tree

14 files changed

+1002
-660
lines changed

14 files changed

+1002
-660
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ celerybeat-schedule
8282
# virtualenv
8383
.venv
8484
venv/
85+
venv36/
8586
ENV/
8687

8788
# Spyder project settings

README.md

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,53 @@
11
# pyevmasm
22

3-
pyevmasm is an assembler and disassembler library for the Ethereum Virtual Machine (EVM). pyevmasm supports python 2.7 and newer.
3+
pyevmasm is an assembler and disassembler library for the Ethereum Virtual Machine (EVM).
44

5-
This library is currently new and under development.
5+
## Examples
6+
```
7+
>>> from pyevmasm import instruction_table, disassemble_hex, disassemble_all, assemble_hex
8+
>>> instruction_table[20]
9+
Instruction(0x14, 'EQ', 0, 2, 1, 3, 'Equality comparision.', None, 0)
10+
>>> instruction_table['EQ']
11+
Instruction(0x14, 'EQ', 0, 2, 1, 3, 'Equality comparision.', None, 0)
12+
>>> instrs = list(disassemble_all(binascii.unhexlify('608060405260043610603f57600035')))
13+
>>> instrs.insert(1, instruction_table['JUMPI'])
14+
>>> a = assemble_hex(instrs)
15+
>>> a
16+
'0x60805760405260043610603f57600035'
17+
>>> print(disassemble_hex(a))
18+
PUSH1 0x80
19+
JUMPI
20+
PUSH1 0x40
21+
MSTORE
22+
...
23+
>>> assemble_hex('PUSH1 0x40\nMSTORE\n')
24+
'0x604052'
25+
```
626

7-
New issues, feature requests, and contributions are welcome. Join us in #ethereum channel on the [Empire Hacking Slack](https://empireslacking.herokuapp.com) to discuss Ethereum security tool development.
27+
## evmasm
28+
`evmasm` is a commandline utility that uses pyevmasm to assemble or disassemble EVM.
829

9-
# evmasm
10-
evmasm is a commandline utility that uses pyevmasm to assemble or disassemble EVM. Below is an example of disassembling the preamble of compiled contract.
30+
```
31+
usage: evmasm [-h] (-a | -d | -t) [-bi] [-bo] [-i [INPUT]] [-o [OUTPUT]]
32+
33+
pyevmasm the EVM assembler and disassembler
1134
35+
optional arguments:
36+
-h, --help show this help message and exit
37+
-a, --assemble Assemble EVM instructions to opcodes
38+
-d, --disassemble Disassemble EVM to opcodes
39+
-t, --print-opcode-table
40+
List supported EVM opcodes
41+
-bi, --binary-input Binary input mode (-d only)
42+
-bo, --binary-output Binary output mode (-a only)
43+
-i [INPUT], --input [INPUT]
44+
Input file, default=stdin
45+
-o [OUTPUT], --output [OUTPUT]
46+
Output file, default=stdout
47+
```
48+
49+
50+
Example; disassembling the preamble of compiled contract.
1251
```
1352
$ echo -n "608060405260043610603f57600035" | evmasm -d
1453
00000000: PUSH1 0x80
@@ -25,6 +64,8 @@ $ echo -n "608060405260043610603f57600035" | evmasm -d
2564

2665
# Installation
2766

67+
Python >=2.7 or Python >=3.3 is required.
68+
2869
Install the latest stable version using pip:
2970
```
3071
pip install pyevmasm
@@ -37,3 +78,7 @@ cd pyevmasm
3778
python setup.py install
3879
```
3980

81+
## Documentation
82+
[https://pyevmasm.readthedocs.io](https://pyevmasm.readthedocs.io)
83+
84+
New issues, feature requests, and contributions are welcome. Join us in #ethereum channel on the [Empire Hacking Slack](https://empireslacking.herokuapp.com) to discuss Ethereum security tool development.

docs/Makefile

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Minimal makefile for Sphinx documentation
2+
#
3+
4+
# You can set these variables from the command line.
5+
SPHINXOPTS =
6+
SPHINXBUILD = sphinx-build
7+
SPHINXPROJ = pyevmasm
8+
SOURCEDIR = .
9+
BUILDDIR = _build
10+
11+
# Put it first so that "make" without argument is like "make help".
12+
help:
13+
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14+
15+
.PHONY: help Makefile
16+
17+
# Catch-all target: route all unknown targets to Sphinx using the new
18+
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19+
%: Makefile
20+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

docs/api.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
API Reference
2+
=============
3+
4+
evmasm
5+
------
6+
.. automodule:: pyevmasm.evmasm
7+
:members:
8+
.. py:data:: instruction
9+
10+
Instance of InstructionTable for EVM. (see; InstructionTable)

docs/conf.py

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
# -*- coding: utf-8 -*-
2+
#
3+
# Configuration file for the Sphinx documentation builder.
4+
#
5+
# This file does only contain a selection of the most common options. For a
6+
# full list see the documentation:
7+
# http://www.sphinx-doc.org/en/master/config
8+
9+
# -- Path setup --------------------------------------------------------------
10+
11+
# If extensions (or modules to document with autodoc) are in another directory,
12+
# add these directories to sys.path here. If the directory is relative to the
13+
# documentation root, use os.path.abspath to make it absolute, like shown here.
14+
#
15+
# import os
16+
# import sys
17+
# sys.path.insert(0, os.path.abspath('.'))
18+
19+
20+
# -- Project information -----------------------------------------------------
21+
22+
project = 'pyevmasm'
23+
copyright = '2018, Trail of Bits'
24+
author = 'Trail of Bits'
25+
26+
# The short X.Y version
27+
version = ''
28+
# The full version, including alpha/beta/rc tags
29+
release = ''
30+
31+
32+
# -- General configuration ---------------------------------------------------
33+
34+
# If your documentation needs a minimal Sphinx version, state it here.
35+
#
36+
# needs_sphinx = '1.0'
37+
38+
# Add any Sphinx extension module names here, as strings. They can be
39+
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
40+
# ones.
41+
extensions = [
42+
'sphinx.ext.todo', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc'
43+
]
44+
45+
# Add any paths that contain templates here, relative to this directory.
46+
templates_path = ['_templates']
47+
48+
# The suffix(es) of source filenames.
49+
# You can specify multiple suffix as a list of string:
50+
#
51+
# source_suffix = ['.rst', '.md']
52+
source_suffix = '.rst'
53+
54+
# The master toctree document.
55+
master_doc = 'index'
56+
57+
# The language for content autogenerated by Sphinx. Refer to documentation
58+
# for a list of supported languages.
59+
#
60+
# This is also used if you do content translation via gettext catalogs.
61+
# Usually you set "language" from the command line for these cases.
62+
language = None
63+
64+
# List of patterns, relative to source directory, that match files and
65+
# directories to ignore when looking for source files.
66+
# This pattern also affects html_static_path and html_extra_path .
67+
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
68+
69+
# The name of the Pygments (syntax highlighting) style to use.
70+
pygments_style = 'sphinx'
71+
72+
73+
# -- Options for HTML output -------------------------------------------------
74+
75+
# The theme to use for HTML and HTML Help pages. See the documentation for
76+
# a list of builtin themes.
77+
#
78+
html_theme = 'alabaster'
79+
80+
# Theme options are theme-specific and customize the look and feel of a theme
81+
# further. For a list of options available for each theme, see the
82+
# documentation.
83+
#
84+
# html_theme_options = {}
85+
86+
# Add any paths that contain custom static files (such as style sheets) here,
87+
# relative to this directory. They are copied after the builtin static files,
88+
# so a file named "default.css" will overwrite the builtin "default.css".
89+
html_static_path = ['_static']
90+
91+
# Custom sidebar templates, must be a dictionary that maps document names
92+
# to template names.
93+
#
94+
# The default sidebars (for documents that don't match any pattern) are
95+
# defined by theme itself. Builtin themes are using these templates by
96+
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
97+
# 'searchbox.html']``.
98+
#
99+
# html_sidebars = {}
100+
101+
102+
# -- Options for HTMLHelp output ---------------------------------------------
103+
104+
# Output file base name for HTML help builder.
105+
htmlhelp_basename = 'pyevmasmdoc'
106+
107+
108+
# -- Options for LaTeX output ------------------------------------------------
109+
110+
latex_elements = {
111+
# The paper size ('letterpaper' or 'a4paper').
112+
#
113+
# 'papersize': 'letterpaper',
114+
115+
# The font size ('10pt', '11pt' or '12pt').
116+
#
117+
# 'pointsize': '10pt',
118+
119+
# Additional stuff for the LaTeX preamble.
120+
#
121+
# 'preamble': '',
122+
123+
# Latex figure (float) alignment
124+
#
125+
# 'figure_align': 'htbp',
126+
}
127+
128+
# Grouping the document tree into LaTeX files. List of tuples
129+
# (source start file, target name, title,
130+
# author, documentclass [howto, manual, or own class]).
131+
latex_documents = [
132+
(master_doc, 'pyevmasm.tex', 'pyevmasm Documentation',
133+
'Trail of Bits', 'manual'),
134+
]
135+
136+
137+
# -- Options for manual page output ------------------------------------------
138+
139+
# One entry per manual page. List of tuples
140+
# (source start file, name, description, authors, manual section).
141+
man_pages = [
142+
(master_doc, 'pyevmasm', 'pyevmasm Documentation',
143+
[author], 1)
144+
]
145+
146+
147+
# -- Options for Texinfo output ----------------------------------------------
148+
149+
# Grouping the document tree into Texinfo files. List of tuples
150+
# (source start file, target name, title, author,
151+
# dir menu entry, description, category)
152+
texinfo_documents = [
153+
(master_doc, 'pyevmasm', 'pyevmasm Documentation',
154+
author, 'pyevmasm', 'One line description of project.',
155+
'Miscellaneous'),
156+
]

docs/index.rst

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
.. pyevmasm documentation master file, created by
2+
sphinx-quickstart on Wed Jul 11 19:50:09 2018.
3+
You can adapt this file completely to your liking, but it should at least
4+
contain the root `toctree` directive.
5+
6+
Welcome to pyevmasm's documentation!
7+
====================================
8+
9+
.. toctree::
10+
:maxdepth: 2
11+
:caption: Contents:
12+
13+
api
14+
15+
16+
Indices and tables
17+
==================
18+
19+
* :ref:`genindex`
20+
* :ref:`modindex`
21+
* :ref:`search`

evmasm

Lines changed: 0 additions & 59 deletions
This file was deleted.

pyevmasm/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
from .evmasm import EVMAsm
1+
from .evmasm import instruction_table, Instruction # noqa: F401
2+
from .evmasm import assemble, assemble_all, assemble_hex, assemble_one
3+
from .evmasm import disassemble, disassemble_all, disassemble_hex, disassemble_one

0 commit comments

Comments
 (0)