Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "flag"
- "os"
- "./qvm"
- )
- var OpcodeTable = [...]string {
- "UNDEF",
- "IGNORE",
- "BREAK",
- "ENTER",
- "LEAVE",
- "CALL",
- "PUSH",
- "POP",
- "CONST",
- "LOCAL",
- "JUMP",
- "EQ",
- "NE",
- "LTI",
- "LEI",
- "GTI",
- "GEI",
- "LTU",
- "LEU",
- "GTU",
- "GEU",
- "EQF",
- "NEF",
- "LTF",
- "LEF",
- "GTF",
- "GEF",
- "LOAD1",
- "LOAD2",
- "LOAD4",
- "STORE1",
- "STORE2",
- "STORE4",
- "ARG",
- "BLOCK_COPY",
- "SEX8",
- "SEX16",
- "NEGI",
- "ADD",
- "SUB",
- "DIVI",
- "DIVU",
- "MODI",
- "MODU",
- "MULI",
- "MULU",
- "BAND",
- "BOR",
- "BXOR",
- "BCOM",
- "LSH",
- "RSHI",
- "RSHU",
- "NEGF",
- "ADDF",
- "SUBF",
- "DIVF",
- "MULF",
- "CVIF",
- "CVFI"}
- var ArgTable = []byte {
- 0,
- 0,
- 0,
- 4,
- 4,
- 0,
- 0,
- 0,
- 4,
- 4,
- 0,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 4,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 1,
- 4,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0}
- func printHeader(qvmFile *qvm.QVMFile) {
- version := "unknown"
- switch qvmFile.Header.Magic {
- case qvm.VM_MAGIC_VER1:
- version = "Ver1"
- case qvm.VM_MAGIC_VER2:
- version = "Ver2"
- }
- fmt.Printf("Magic: 0x%x[%s]\n", qvmFile.Header.Magic, version)
- fmt.Printf("Instruction Count: 0x%x\n", qvmFile.Header.InstructionCount)
- fmt.Printf("Code Offset: 0x%x\n", qvmFile.Header.CodeOffset)
- fmt.Printf("Code Length: 0x%x\n", qvmFile.Header.CodeLength)
- fmt.Printf("Data Offset: 0x%x\n", qvmFile.Header.DataOffset)
- fmt.Printf("Data Length: 0x%x\n", qvmFile.Header.DataLength)
- fmt.Printf("Lit Length: 0x%x\n", qvmFile.Header.LitLength)
- fmt.Printf("Bss Length: 0x%x\n", qvmFile.Header.BssLength)
- if qvmFile.Header.Magic == qvm.VM_MAGIC_VER2 {
- fmt.Printf("Jump Table Length: 0x%x\n", qvmFile.Header.JumpTableLength)
- }
- }
- func parseInstructions(qvmFile *qvm.QVMFile) {
- return
- }
- func parseProcedures(qvmFile *qvm.QVMFile) {
- return
- }
- func parseCodeXRefs(qvmFile *qvm.QVMFile) {
- return
- }
- func parseStrings(qvmFile *qvm.QVMFile) {
- return
- }
- func main() {
- var syscallsFile string
- var commentsFile string
- flag.StringVar(&syscallsFile, "s", "", "Specify a file defining the system calls for this QVM.")
- flag.StringVar(&commentsFile, "c", "", "Specify a file containing comments from a previous disassembly.")
- flag.Parse()
- if flag.NArg() != 1 {
- fmt.Println("Must specify one QVM!")
- }
- file, err := os.Open(flag.Arg(0), os.O_RDONLY, 0444)
- if err != nil {
- fmt.Println(err.String())
- os.Exit(-1)
- }
- qvmFile, err := qvm.NewQVMFile(file)
- printHeader(qvmFile)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement