aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/disasm
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-01-29 21:46:59 +0800
committerobscuren <geffobscura@gmail.com>2015-01-29 21:46:59 +0800
commitddf17d93acf92ef18b0134f19f22220362e06bad (patch)
tree1e506bd62ba922f915f9fef2cb90b5f7d710afb5 /cmd/disasm
parent84adf77bf3492351de82f0ec820a1d280e85a5cd (diff)
downloadgo-tangerine-ddf17d93acf92ef18b0134f19f22220362e06bad.tar.gz
go-tangerine-ddf17d93acf92ef18b0134f19f22220362e06bad.tar.zst
go-tangerine-ddf17d93acf92ef18b0134f19f22220362e06bad.zip
Samples and disams cmd for evm code
Diffstat (limited to 'cmd/disasm')
-rw-r--r--cmd/disasm/main.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/cmd/disasm/main.go b/cmd/disasm/main.go
new file mode 100644
index 000000000..c07246b00
--- /dev/null
+++ b/cmd/disasm/main.go
@@ -0,0 +1,34 @@
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+
+ "github.com/ethereum/go-ethereum/ethutil"
+ "github.com/ethereum/go-ethereum/vm"
+)
+
+func main() {
+ code, err := ioutil.ReadAll(os.Stdin)
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ code = ethutil.Hex2Bytes(string(code[:len(code)-1]))
+ fmt.Printf("%x\n", code)
+
+ for pc := uint64(0); pc < uint64(len(code)); pc++ {
+ op := vm.OpCode(code[pc])
+ fmt.Printf("%-5d %v", pc, op)
+
+ 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
+ fmt.Printf(" => %x", code[pc+1:pc+1+a])
+
+ pc += a
+ }
+ fmt.Println()
+ }
+}