轻量级以太坊EVM字节码asm指令注册表和反汇编程序库。

evmdasm的Python项目详细描述


[![构建状态](https://api.travis-ci.org/tintinweb/evmdasm.svg?branch=master)](https://travis ci.org/tintinweb/evmdasm/)


\evmdasm
*一个轻量级以太坊evm字节码指令注册表和反汇编程序库。*

此库旨在为evm操作码和指令提供静态接口和注册表。我们的想法是让它尽可能轻量级,特别是在依赖项或高级功能方面。

例如,[ethereum dasm](https://github.com/tintinweb/ethereum-dasm)项目-一种具有静态/动态分析功能的高级反汇编程序-依赖于注册表以及[evmdasm]提供的基本反汇编功能(https://github.com/tintinweb/evmdasm)。


For more information visit the [Wiki](https://github.com/tintinweb/evmdasm/wiki)

### Setup

##### from pypi
```
#> python3 -m pip install evmdasm
```

##### from source
```
#> python3 setup.py install
```

### Commandline实用工具:python3-m evmdasm—帮助:反汇编python3-m evmdasm—反汇编0x60406040ff
push1 40
push1 40
selfdestruct
````

]
0xop指令类别gas
=============================
0x0停止终止0
0x1添加算术3
0x2 mul算术5
0x3|子算术3

0xf0创建系统32000
0xf1调用系统40
0xf2调用代码系统40
0xf3返回终止0
0xf4|委派呼叫系统40
0xf5创建2系统32000
0xfa静态呼叫系统40
0xfd还原终止0
0xff自毁终止0

`````

###库

这些是evm可用的初始设置ob指令。保持模板静态/不变。
*要从模板创建新指令,请使用"instruction.clone()"或"registry.create_instruction(name=;或opcode=)"。使用evm指令的这个新实例,您可以随心所欲地做任何事情。
*若要添加新指令,只需创建一个"instruction(…)"对象,并将其放入"registry.instructions"中,然后从evm廑instruction import registry



``python
``python
模板对象(避免修改它们)

jmp=registry.instructions_by_opcode["jump"];从指令注册表获取模板对象
jmp=registry.instructions_by_name["jump"];从指令注册表获取模板对象


如果i.gas>;500]

```

code

*要使用evm字节码,请创建一个新的"evm bytecode(…)"对象。它可以使用"bytes"、"x<;hexstr>;"或"hexstr"
*使用"evmbytecode.deassemble()"将其转换为"evminstructions(…)"对象(实际上是"instruction(…)"对象的自定义"list")
*使用"evminstructions.assemble()"将其转换为"evmbytecode(…)"对象。

`` python
='606060405260043610062576000357C0100000000000000000000000000000000000000000000000000000463FFFFFF16806319E30BC7146100775780635BD74AFE146101055780639DF21154461017F578063B1D131BF14610AD575B600036019019061074919061042D565B50005B3415600825FD5B61008A6102565B604058060200182810382528381518152602001915080519060200190808360005B838110156100CA578082015181840152602081019050610AF565B50505090810190601F1680156100F757808201801601836020036101000A031916815260200150509250505050405180910390F35B61017D60048080573FFffffffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019082018035906020019080601F016020809104026001604058101604052809391908152602001838082843782050505050908035906020019091905050102a056505b005b61ab60048080573ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16906905061038d565b0034156101b857600080fd5b6101c0610408565B604051808273FFffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015050600405180910390F35B600180546001816001161515610002036002900480601F0160208091040260016040581016040592918152602001828054600181600116110002031629004801529850601F1061026D576101008354028352960200191610298565B820191906000520600020905B81548152906001019060200180831161027B579003601F1681915B50505081565B3373FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1660080549061000A900473FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1673FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFffffffff 161415156102ffb57600008 fd5b8273ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168183604051808280519060200190808360005b838110156103780815184060208101905061265b50050505090810190601f1681680156e582038015018300361010000a0319168020019150501505060006040583038185876187965003F192505050505050565B60080905490610100A900473FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1673FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF166108FC3073FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF163190811506040516000604051808303818588F193505015151515610505050605056005FF50565B6000809054990610100A900473ffffffffffffffffffffffffffffffffffffffffffffffff 1681565b82805460018160011615161000203166002900490600052602060002090601f01602009004810192601f1061046e57803560ff191683800117855561049c56b8280016001855582156049c5791182015b82111561049b57822358255916020019190610480565b5090506104a9919061044ad565b5090565B6104CF91905B808211156104CB576000816000160009055506001016104B3565B5090565B905600A165627A7723058202592C848FD2DBF19B6558815A8C0A67519B4AD552EB001C92109A188EF215950029'

evmcode=evm bytecode(evm字节码)可以是hexstr,0xhexstr或bytes
evm instructions=evmcode.disassembly();返回evminstructions对象(实际上是新指令对象的列表)

==evminstructions.assemble().as_hexstring)汇编指令列表

````




欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用Java加密,用Rijndael用C#解密   java如何解析XML文档?   java HttpRequestException:无法在Android Studio 3.1.1中引导警告(但同步成功)   java跟踪Swing组件的正确方法是什么?   ubuntu gradle:java:找不到系统java编译器   java数据库元数据。getColumns()给出SQL Server 2008的错误   在Java中使用不支持的和/或多个字符集处理输入的字符编码   java在基于Web的Spring范围内使用Thymeleaf处理HTML文件,并将处理后的模板存储为字符串   即使在eclipse中执行maven更新,java也无法导入依赖项   排序表的java JTable选择间隔问题   数组的java随机化快速排序方法   java队列线程池   拆分如何读取选项卡分隔的文件并使用java从中选择几个值   java执行环境描述、标准1.1x虚拟机和标准虚拟机之间有什么区别   java如何在保持分页的同时过滤springboot中的页面?   java在Box2D对象上指定纹理   java建议在EmployeePanel Nursester中显示假期的方法