diff options
author | Valentin Wüstholz <wuestholz@users.noreply.github.com> | 2017-02-27 19:21:19 +0800 |
---|---|---|
committer | Felix Lange <fjl@users.noreply.github.com> | 2017-02-27 19:21:19 +0800 |
commit | 37511ec5207b46829226b94e7c0da6a74609dd2a (patch) | |
tree | 4688a87378dd16cd9785ee66150380d4fdd66cb3 /cmd/disasm/main.go | |
parent | 5c8fe28b725bd9b128edceae3215132ea741641b (diff) | |
download | go-tangerine-37511ec5207b46829226b94e7c0da6a74609dd2a.tar go-tangerine-37511ec5207b46829226b94e7c0da6a74609dd2a.tar.gz go-tangerine-37511ec5207b46829226b94e7c0da6a74609dd2a.tar.bz2 go-tangerine-37511ec5207b46829226b94e7c0da6a74609dd2a.tar.lz go-tangerine-37511ec5207b46829226b94e7c0da6a74609dd2a.tar.xz go-tangerine-37511ec5207b46829226b94e7c0da6a74609dd2a.tar.zst go-tangerine-37511ec5207b46829226b94e7c0da6a74609dd2a.zip |
core, core/vm, cmd/disasm: unify procedures for disassembling evm code (#3530)
Diffstat (limited to 'cmd/disasm/main.go')
-rw-r--r-- | cmd/disasm/main.go | 28 |
1 files changed, 5 insertions, 23 deletions
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) - } - } } |