github.com/jonasnick/go-ethereum@v0.7.12-0.20150216215225-22176f05d387/cmd/disasm/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 8 "github.com/jonasnick/go-ethereum/ethutil" 9 "github.com/jonasnick/go-ethereum/vm" 10 ) 11 12 func main() { 13 code, err := ioutil.ReadAll(os.Stdin) 14 if err != nil { 15 fmt.Println(err) 16 os.Exit(1) 17 } 18 code = ethutil.Hex2Bytes(string(code[:len(code)-1])) 19 fmt.Printf("%x\n", code) 20 21 for pc := uint64(0); pc < uint64(len(code)); pc++ { 22 op := vm.OpCode(code[pc]) 23 fmt.Printf("%-5d %v", pc, op) 24 25 switch op { 26 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: 27 a := uint64(op) - uint64(vm.PUSH1) + 1 28 fmt.Printf(" => %x", code[pc+1:pc+1+a]) 29 30 pc += a 31 } 32 fmt.Println() 33 } 34 }