轻量级以太坊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)汇编指令列表
````
\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)汇编指令列表
````