github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/cmd/evm/disasm.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 12:09:27</date>
    10  //</624342589847375872>
    11  
    12  
    13  package main
    14  
    15  import (
    16  	"errors"
    17  	"fmt"
    18  	"io/ioutil"
    19  	"strings"
    20  
    21  	"github.com/ethereum/go-ethereum/core/asm"
    22  	cli "gopkg.in/urfave/cli.v1"
    23  )
    24  
    25  var disasmCommand = cli.Command{
    26  	Action:    disasmCmd,
    27  	Name:      "disasm",
    28  	Usage:     "disassembles evm binary",
    29  	ArgsUsage: "<file>",
    30  }
    31  
    32  func disasmCmd(ctx *cli.Context) error {
    33  	if len(ctx.Args().First()) == 0 {
    34  		return errors.New("filename required")
    35  	}
    36  
    37  	fn := ctx.Args().First()
    38  	in, err := ioutil.ReadFile(fn)
    39  	if err != nil {
    40  		return err
    41  	}
    42  
    43  	code := strings.TrimSpace(string(in[:]))
    44  	fmt.Printf("%v\n", code)
    45  	return asm.PrintDisassembled(code)
    46  }
    47