// Copyright 2019 syzkaller project authors. All rights reserved. // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. // Parses a program and prints it including all default values. package main import ( "flag" "fmt" "os" "runtime" "github.com/google/syzkaller/prog" _ "github.com/google/syzkaller/sys" ) var ( flagOS = flag.String("os", runtime.GOOS, "target os") flagArch = flag.String("arch", runtime.GOARCH, "target arch") flagProg = flag.String("prog", "", "file with program to expand") flagStrict = flag.Bool("strict", false, "parse input program in strict mode") ) func main() { flag.Parse() if *flagProg == "" { flag.Usage() os.Exit(1) } target, err := prog.GetTarget(*flagOS, *flagArch) if err != nil { fmt.Fprintf(os.Stderr, "%v\n", err) os.Exit(1) } data, err := os.ReadFile(*flagProg) if err != nil { fmt.Fprintf(os.Stderr, "failed to read prog file: %v\n", err) os.Exit(1) } mode := prog.NonStrict if *flagStrict { mode = prog.Strict } p, err := target.Deserialize(data, mode) if err != nil { fmt.Fprintf(os.Stderr, "failed to deserialize the program: %v\n", err) os.Exit(1) } fmt.Printf("%s", p.SerializeVerbose()) }