forked from mirror/go-ethereum
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
21 lines
594 B
21 lines
594 B
package vm
|
|
|
|
import "fmt"
|
|
|
|
func Disasm(code []byte) []string {
|
|
var out []string
|
|
for pc := uint64(0); pc < uint64(len(code)); pc++ {
|
|
op := OpCode(code[pc])
|
|
out = append(out, op.String())
|
|
|
|
switch op {
|
|
case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
|
|
a := uint64(op) - uint64(PUSH1) + 1
|
|
out = append(out, fmt.Sprintf("0x%x", code[pc+1:pc+1+a]))
|
|
|
|
pc += a
|
|
}
|
|
}
|
|
|
|
return out
|
|
}
|
|
|