From 2b854f96b1a7be5c5c563fe798aaa2f6835ad2c6 Mon Sep 17 00:00:00 2001 From: Andrey Konovalov Date: Mon, 23 Sep 2019 15:34:59 +0200 Subject: tools: add syz-expand The syz-expand tools allows to parse a program and print it including all the default values. This is mainly useful for debugging, like doing manual program modifications while trying to come up with a reproducer for some particular kernel behavior. --- tools/syz-expand/expand.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tools/syz-expand/expand.go (limited to 'tools') diff --git a/tools/syz-expand/expand.go b/tools/syz-expand/expand.go new file mode 100644 index 000000000..d90053d9d --- /dev/null +++ b/tools/syz-expand/expand.go @@ -0,0 +1,52 @@ +// 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" + "io/ioutil" + "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", err) + os.Exit(1) + } + data, err := ioutil.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()) +} -- cgit mrf-deployment