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  }