From 0e3ee7ae77a21c6d598599ac1bf94aefe6d5681d Mon Sep 17 00:00:00 2001 From: Ethan Graham Date: Mon, 15 Sep 2025 13:14:56 +0000 Subject: tools/kfuzztest-gen: add kfuzztest-gen tool Add a tool for generating a syscaller description for every KFuzzTest target discovered in a vmlinux binary and outputting it to stdout. Signed-off-by: Ethan Graham --- tools/kfuzztest-gen/main.go | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tools/kfuzztest-gen/main.go 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) +} -- cgit mrf-deployment