aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/disasm/main.go
diff options
context:
space:
mode:
authorValentin Wüstholz <wuestholz@users.noreply.github.com>2017-02-27 19:21:19 +0800
committerFelix Lange <fjl@users.noreply.github.com>2017-02-27 19:21:19 +0800
commit37511ec5207b46829226b94e7c0da6a74609dd2a (patch)
tree4688a87378dd16cd9785ee66150380d4fdd66cb3 /cmd/disasm/main.go
parent5c8fe28b725bd9b128edceae3215132ea741641b (diff)
downloadgo-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.go28
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)
- }
- }
}