aboutsummaryrefslogtreecommitdiffstats
path: root/core/asm.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 /core/asm.go
parent5c8fe28b725bd9b128edceae3215132ea741641b (diff)
downloadgo-tangerine-37511ec5207b46829226b94e7c0da6a74609dd2a.tar.gz
go-tangerine-37511ec5207b46829226b94e7c0da6a74609dd2a.tar.zst
go-tangerine-37511ec5207b46829226b94e7c0da6a74609dd2a.zip
core, core/vm, cmd/disasm: unify procedures for disassembling evm code (#3530)
Diffstat (limited to 'core/asm.go')
-rw-r--r--core/asm.go64
1 files changed, 0 insertions, 64 deletions
diff --git a/core/asm.go b/core/asm.go
deleted file mode 100644
index b2e47b5e9..000000000
--- a/core/asm.go
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2014 The go-ethereum Authors
-// This file is part of the go-ethereum library.
-//
-// The go-ethereum library is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The go-ethereum library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
-
-package core
-
-import (
- "fmt"
- "math/big"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/vm"
-)
-
-func Disassemble(script []byte) (asm []string) {
- pc := new(big.Int)
- for {
- if pc.Cmp(big.NewInt(int64(len(script)))) >= 0 {
- return
- }
-
- // Get the memory location of pc
- val := script[pc.Int64()]
- // Get the opcode (it must be an opcode!)
- op := vm.OpCode(val)
-
- asm = append(asm, fmt.Sprintf("%04v: %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:
- pc.Add(pc, common.Big1)
- a := int64(op) - int64(vm.PUSH1) + 1
- if int(pc.Int64()+a) > len(script) {
- return
- }
-
- data := script[pc.Int64() : pc.Int64()+a]
- if len(data) == 0 {
- data = []byte{0}
- }
- asm = append(asm, fmt.Sprintf("%04v: 0x%x", pc, data))
-
- pc.Add(pc, big.NewInt(a-1))
- }
-
- pc.Add(pc, common.Big1)
- }
-}