Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.59 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "flag"
  6.     "os"
  7.     "./qvm"
  8. )
  9.  
  10. var OpcodeTable = [...]string {
  11.     "UNDEF",
  12.     "IGNORE",
  13.     "BREAK",
  14.     "ENTER",
  15.     "LEAVE",
  16.     "CALL",
  17.     "PUSH",
  18.     "POP",
  19.     "CONST",
  20.     "LOCAL",
  21.     "JUMP",
  22.     "EQ",
  23.     "NE",
  24.     "LTI",
  25.     "LEI",
  26.     "GTI",
  27.     "GEI",
  28.     "LTU",
  29.     "LEU",
  30.     "GTU",
  31.     "GEU",
  32.     "EQF",
  33.     "NEF",
  34.     "LTF",
  35.     "LEF",
  36.     "GTF",
  37.     "GEF",
  38.     "LOAD1",
  39.     "LOAD2",
  40.     "LOAD4",
  41.     "STORE1",
  42.     "STORE2",
  43.     "STORE4",
  44.     "ARG",
  45.     "BLOCK_COPY",
  46.     "SEX8",
  47.     "SEX16",
  48.     "NEGI",
  49.     "ADD",
  50.     "SUB",
  51.     "DIVI",
  52.     "DIVU",
  53.     "MODI",
  54.     "MODU",
  55.     "MULI",
  56.     "MULU",
  57.     "BAND",
  58.     "BOR",
  59.     "BXOR",
  60.     "BCOM",
  61.     "LSH",
  62.     "RSHI",
  63.     "RSHU",
  64.     "NEGF",
  65.     "ADDF",
  66.     "SUBF",
  67.     "DIVF",
  68.     "MULF",
  69.     "CVIF",
  70.     "CVFI"}
  71.  
  72. var ArgTable = []byte {
  73.     0,
  74.     0,
  75.     0,
  76.     4,
  77.     4,
  78.     0,
  79.     0,
  80.     0,
  81.     4,
  82.     4,
  83.     0,
  84.     4,
  85.     4,
  86.     4,
  87.     4,
  88.     4,
  89.     4,
  90.     4,
  91.     4,
  92.     4,
  93.     4,
  94.     4,
  95.     4,
  96.     4,
  97.     4,
  98.     4,
  99.     4,
  100.     0,
  101.     0,
  102.     0,
  103.     0,
  104.     0,
  105.     0,
  106.     1,
  107.     4,
  108.     0,
  109.     0,
  110.     0,
  111.     0,
  112.     0,
  113.     0,
  114.     0,
  115.     0,
  116.     0,
  117.     0,
  118.     0,
  119.     0,
  120.     0,
  121.     0,
  122.     0,
  123.     0,
  124.     0,
  125.     0,
  126.     0,
  127.     0,
  128.     0,
  129.     0,
  130.     0,
  131.     0,
  132.     0}
  133.  
  134. func printHeader(qvmFile *qvm.QVMFile) {
  135.     version := "unknown"
  136.     switch qvmFile.Header.Magic {
  137.         case qvm.VM_MAGIC_VER1:
  138.             version = "Ver1"
  139.         case qvm.VM_MAGIC_VER2:
  140.             version = "Ver2"
  141.     }
  142.     fmt.Printf("Magic: 0x%x[%s]\n", qvmFile.Header.Magic, version)
  143.     fmt.Printf("Instruction Count: 0x%x\n", qvmFile.Header.InstructionCount)
  144.     fmt.Printf("Code Offset: 0x%x\n", qvmFile.Header.CodeOffset)
  145.     fmt.Printf("Code Length: 0x%x\n", qvmFile.Header.CodeLength)
  146.     fmt.Printf("Data Offset: 0x%x\n", qvmFile.Header.DataOffset)
  147.     fmt.Printf("Data Length: 0x%x\n", qvmFile.Header.DataLength)
  148.     fmt.Printf("Lit Length: 0x%x\n", qvmFile.Header.LitLength)
  149.     fmt.Printf("Bss Length: 0x%x\n", qvmFile.Header.BssLength)
  150.     if qvmFile.Header.Magic == qvm.VM_MAGIC_VER2 {
  151.         fmt.Printf("Jump Table Length: 0x%x\n", qvmFile.Header.JumpTableLength)
  152.     }
  153. }
  154.  
  155. func parseInstructions(qvmFile *qvm.QVMFile) {
  156.     return
  157. }
  158.  
  159. func parseProcedures(qvmFile *qvm.QVMFile) {
  160.     return
  161. }
  162.  
  163. func parseCodeXRefs(qvmFile *qvm.QVMFile) {
  164.     return
  165. }
  166. func parseStrings(qvmFile *qvm.QVMFile) {
  167.     return
  168. }
  169.  
  170. func main() {
  171.     var syscallsFile string
  172.     var commentsFile string
  173.     flag.StringVar(&syscallsFile, "s", "", "Specify a file defining the system calls for this QVM.")
  174.     flag.StringVar(&commentsFile, "c", "", "Specify a file containing comments from a previous disassembly.")
  175.     flag.Parse()
  176.  
  177.     if flag.NArg() != 1 {
  178.         fmt.Println("Must specify one QVM!")
  179.     }
  180.     file, err := os.Open(flag.Arg(0), os.O_RDONLY, 0444)
  181.     if err != nil {
  182.         fmt.Println(err.String())
  183.         os.Exit(-1)
  184.     }
  185.     qvmFile, err := qvm.NewQVMFile(file)
  186.     printHeader(qvmFile)
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement