实用工具

汇编程序

汇编实用程序允许解析和编译Ethers ASM Dialect源文件。

asm.parse( code ) 节点

解析ethers格式的程序集文件并返回抽象语法树(Abstract Syntax Tree)

asm.assemble( node ) string< DataHexString >

执行抽象语法树(Abstract Syntax Tree)节点的汇编,并返回结果(字节码表示)。

反汇编程序

反汇编程序 可以很容易地将字节码转换为一个对象,方便地去检查程序结构。

asm.disassemble( bytecode ) 字节码

返回给定字节码的操作数组。

asm.formatBytecode( operations ) string

创建操作(Operation)数组的格式化输出。

字节码 inherits Array<操作(Operation)>

每个数组索引代表一个操作,将多字节操作(即PUSH)分解为单个操作。

bytecode.getOperation( offset ) 操作(Operation)

通过给定的偏移量在字节码中获得操作(operation)。需要确保偏移处的字节是一个操作, 而不是包含在PUSH中的数据(如果是这种情况将返回null)。

操作(Operation)

操作是来自反汇编字节码流的单个命令。

operation.opcode 操作码(Opcode)

该操作的操作码。

operation.offset number

该操作进入字节码的偏移量。

operation.pushValue string< DataHexString >

如果操作码是PUSH,那么这个输出就是push的值

操作码(Opcode)

asm.Opcode.from( valueOrMnemonic ) 操作码(Opcode)

为给定的数值(例如:0x60 is PUSH1)或助记符字符串(例如:"PUSH1")创建一个新的操作码实例。

属性

opcode.value number

该操作码的值(字节码作为数字)。

opcode.mnemonic string

该操作码的助记符字符串。

opcode.delta number

该操作码将从堆栈中消耗的项的数量。

opcode.alpha number

该操作码将压入栈中的项数。

opcode.doc string

该操作码功能的简短描述。

opcode.isMemory( ) "read" | "write" | "full"

如果操作码访问内存则返回true。

opcode.isStatic( ) boolean

如果操作码不能更改状态(静态的),则返回true。

opcode.isJump( ) boolean

如果操作码是跳转操作,则返回true。

opcode.isPush( ) number

如果操作码不是PUSH*,则返回0; 如果是,则返回该操作码将push的字节。