github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/tools/kfuzztest-gen/main.go (about)

     1  // Copyright 2025 syzkaller project authors. All rights reserved.
     2  // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
     3  
     4  // Small tool for systematically outputting syzlang descriptions of KFuzzTest
     5  // of a vmlinux binary.
     6  package main
     7  
     8  import (
     9  	"fmt"
    10  	"io"
    11  	"os"
    12  
    13  	"github.com/google/syzkaller/pkg/kfuzztest"
    14  	"github.com/google/syzkaller/pkg/log"
    15  	"github.com/google/syzkaller/pkg/tool"
    16  )
    17  
    18  func main() {
    19  	usage := func(w io.Writer) {
    20  		fmt.Fprintln(w, "usage: ./kfuzztest-gen /path/to/vmlinux")
    21  	}
    22  	if len(os.Args) != 2 {
    23  		usage(os.Stderr)
    24  		os.Exit(1)
    25  	}
    26  
    27  	extractor, err := kfuzztest.NewExtractor(os.Args[1])
    28  	if err != nil {
    29  		tool.Fail(err)
    30  	}
    31  	defer extractor.Close()
    32  
    33  	log.Log(0, "extracting ELF data")
    34  	res, err := extractor.ExtractAll()
    35  	if err != nil {
    36  		tool.Fail(err)
    37  	}
    38  	log.Log(0, res.String())
    39  
    40  	builder := kfuzztest.NewBuilder(res.Funcs, res.Structs, res.Constraints, res.Annotations)
    41  	desc, err := builder.EmitSyzlangDescription()
    42  	if err != nil {
    43  		tool.Fail(err)
    44  	}
    45  	log.Logf(0, "emitting syzlang description")
    46  	fmt.Println(desc)
    47  }