aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/disasm/main.go
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/main.go
parent84adf77bf3492351de82f0ec820a1d280e85a5cd (diff)
downloaddexon-ddf17d93acf92ef18b0134f19f22220362e06bad.tar.gz
dexon-ddf17d93acf92ef18b0134f19f22220362e06bad.tar.zst
dexon-ddf17d93acf92ef18b0134f19f22220362e06bad.zip
Samples and disams cmd for evm code
Diffstat (limited to 'cmd/disasm/main.go')
-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()
+ }
+}