forked from forks/go-ethereum
cmd/disasm: fix array-out-of-bounds error (#3491)
This commit is contained in:
parent
17182732f5
commit
0a5450fe04
1 changed files with 8 additions and 4 deletions
|
|
@ -42,15 +42,19 @@ func main() {
|
||||||
|
|
||||||
for pc := uint64(0); pc < uint64(len(code)); pc++ {
|
for pc := uint64(0); pc < uint64(len(code)); pc++ {
|
||||||
op := vm.OpCode(code[pc])
|
op := vm.OpCode(code[pc])
|
||||||
fmt.Printf("%-5d %v", pc, op)
|
|
||||||
|
|
||||||
switch 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:
|
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
|
a := uint64(op) - uint64(vm.PUSH1) + 1
|
||||||
fmt.Printf(" => %x", code[pc+1:pc+1+a])
|
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
|
pc += a
|
||||||
|
default:
|
||||||
|
fmt.Printf("%-5d %v\n", pc, op)
|
||||||
}
|
}
|
||||||
fmt.Println()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue