diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/kfuzztest-gen/main.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tools/kfuzztest-gen/main.go b/tools/kfuzztest-gen/main.go new file mode 100644 index 000000000..c469c3916 --- /dev/null +++ b/tools/kfuzztest-gen/main.go @@ -0,0 +1,47 @@ +// Copyright 2025 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. + +// Small tool for systematically outputting syzlang descriptions of KFuzzTest +// of a vmlinux binary. +package main + +import ( + "fmt" + "io" + "os" + + "github.com/google/syzkaller/pkg/kfuzztest" + "github.com/google/syzkaller/pkg/log" + "github.com/google/syzkaller/pkg/tool" +) + +func main() { + usage := func(w io.Writer) { + fmt.Fprintln(w, "usage: ./kfuzztest-gen /path/to/vmlinux") + } + if len(os.Args) != 2 { + usage(os.Stderr) + os.Exit(1) + } + + extractor, err := kfuzztest.NewExtractor(os.Args[1]) + if err != nil { + tool.Fail(err) + } + defer extractor.Close() + + log.Log(0, "extracting ELF data") + res, err := extractor.ExtractAll() + if err != nil { + tool.Fail(err) + } + log.Log(0, res.String()) + + builder := kfuzztest.NewBuilder(res.Funcs, res.Structs, res.Constraints, res.Annotations) + desc, err := builder.EmitSyzlangDescription() + if err != nil { + tool.Fail(err) + } + log.Logf(0, "emitting syzlang description") + fmt.Println(desc) +} |
