实用工具

汇编程序

汇编实用程序允许解析和编译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的字节。