22 lines
		
	
	
		
			594 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			22 lines
		
	
	
		
			594 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package vm
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import "fmt"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func Disasm(code []byte) []string {
							 | 
						||
| 
								 | 
							
									var out []string
							 | 
						||
| 
								 | 
							
									for pc := uint64(0); pc < uint64(len(code)); pc++ {
							 | 
						||
| 
								 | 
							
										op := OpCode(code[pc])
							 | 
						||
| 
								 | 
							
										out = append(out, op.String())
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										switch op {
							 | 
						||
| 
								 | 
							
										case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
							 | 
						||
| 
								 | 
							
											a := uint64(op) - uint64(PUSH1) + 1
							 | 
						||
| 
								 | 
							
											out = append(out, fmt.Sprintf("0x%x", code[pc+1:pc+1+a]))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											pc += a
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return out
							 | 
						||
| 
								 | 
							
								}
							 |