1
0
forked from cerc-io/plugeth
plugeth/cmd/disasm/main.go

35 lines
925 B
Go
Raw Normal View History

2015-01-29 13:46:59 +00:00
package main
import (
"fmt"
"io/ioutil"
"os"
2015-03-16 10:27:38 +00:00
"github.com/ethereum/go-ethereum/common"
2015-03-23 15:59:09 +00:00
"github.com/ethereum/go-ethereum/core/vm"
2015-01-29 13:46:59 +00:00
)
func main() {
code, err := ioutil.ReadAll(os.Stdin)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
2015-03-16 10:27:38 +00:00
code = common.Hex2Bytes(string(code[:len(code)-1]))
2015-01-29 13:46:59 +00:00
fmt.Printf("%x\n", code)
for pc := uint64(0); pc < uint64(len(code)); pc++ {
op := vm.OpCode(code[pc])
fmt.Printf("%-5d %v", pc, op)
switch op {
case vm.PUSH1, vm.PUSH2, vm.PUSH3, vm.PUSH4, vm.PUSH5, vm.PUSH6, vm.PUSH7, vm.PUSH8, vm.PUSH9, vm.PUSH10, vm.PUSH11, vm.PUSH12, vm.PUSH13, vm.PUSH14, vm.PUSH15, vm.PUSH16, vm.PUSH17, vm.PUSH18, vm.PUSH19, vm.PUSH20, vm.PUSH21, vm.PUSH22, vm.PUSH23, vm.PUSH24, vm.PUSH25, vm.PUSH26, vm.PUSH27, vm.PUSH28, vm.PUSH29, vm.PUSH30, vm.PUSH31, vm.PUSH32:
a := uint64(op) - uint64(vm.PUSH1) + 1
fmt.Printf(" => %x", code[pc+1:pc+1+a])
pc += a
}
fmt.Println()
}
}