From 37511ec5207b46829226b94e7c0da6a74609dd2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20W=C3=BCstholz?= Date: Mon, 27 Feb 2017 12:21:19 +0100 Subject: core, core/vm, cmd/disasm: unify procedures for disassembling evm code (#3530) --- cmd/disasm/main.go | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) (limited to 'cmd/disasm/main.go') diff --git a/cmd/disasm/main.go b/cmd/disasm/main.go index e6a9a6676..4ea2dfcba 100644 --- a/cmd/disasm/main.go +++ b/cmd/disasm/main.go @@ -18,43 +18,25 @@ package main import ( - "encoding/hex" "fmt" "io/ioutil" "os" "strings" - "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/core/asm" ) func main() { - code, err := ioutil.ReadAll(os.Stdin) + in, err := ioutil.ReadAll(os.Stdin) if err != nil { fmt.Println(err) os.Exit(1) } - code, err = hex.DecodeString(strings.TrimSpace(string(code[:]))) + code := strings.TrimSpace(string(in[:])) + fmt.Printf("%v\n", code) + err = asm.PrintDisassembled(code) if err != nil { fmt.Printf("Error: %v\n", err) return } - fmt.Printf("%x\n", code) - - for pc := uint64(0); pc < uint64(len(code)); pc++ { - op := vm.OpCode(code[pc]) - - 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 - u := pc + 1 + a - if uint64(len(code)) <= pc || uint64(len(code)) < u { - fmt.Printf("Error: incomplete push instruction at %v\n", pc) - return - } - fmt.Printf("%-5d %v => %x\n", pc, op, code[pc+1:u]) - pc += a - default: - fmt.Printf("%-5d %v\n", pc, op) - } - } } -- cgit v1.2.3