From a8a0b01a8bc49b2088d33c529198d4780f66b94a Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Tue, 17 Oct 2017 10:54:19 +0200 Subject: tools/syz-mutate: allow to specify target --- tools/syz-mutate/mutate.go | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) (limited to 'tools') diff --git a/tools/syz-mutate/mutate.go b/tools/syz-mutate/mutate.go index 242175ef8..3515a663e 100644 --- a/tools/syz-mutate/mutate.go +++ b/tools/syz-mutate/mutate.go @@ -18,39 +18,40 @@ import ( ) var ( + flagOS = flag.String("os", runtime.GOOS, "target os") + flagArch = flag.String("arch", runtime.GOARCH, "target arch") flagSeed = flag.Int("seed", -1, "prng seed") ) func main() { flag.Parse() - if flag.NArg() != 1 { - fmt.Fprintf(os.Stderr, "usage: mutate program\n") - os.Exit(1) - } - target, err := prog.GetTarget(runtime.GOOS, runtime.GOARCH) + target, err := prog.GetTarget(*flagOS, *flagArch) if err != nil { fmt.Fprintf(os.Stderr, "%v", err) os.Exit(1) } - data, err := ioutil.ReadFile(flag.Arg(0)) - if err != nil { - fmt.Fprintf(os.Stderr, "failed to read prog file: %v\n", err) - os.Exit(1) - } - p, err := target.Deserialize(data) - if err != nil { - fmt.Fprintf(os.Stderr, "failed to deserialize the program: %v\n", err) - os.Exit(1) - } - - prios := target.CalculatePriorities(nil) - ct := target.BuildChoiceTable(prios, nil) - seed := time.Now().UnixNano() if *flagSeed != -1 { seed = int64(*flagSeed) } rs := rand.NewSource(seed) - p.Mutate(rs, len(p.Calls)+10, ct, nil) + prios := target.CalculatePriorities(nil) + ct := target.BuildChoiceTable(prios, nil) + var p *prog.Prog + if flag.NArg() == 0 { + p = target.Generate(rs, 20, ct) + } else { + data, err := ioutil.ReadFile(flag.Arg(0)) + if err != nil { + fmt.Fprintf(os.Stderr, "failed to read prog file: %v\n", err) + os.Exit(1) + } + p, err = target.Deserialize(data) + if err != nil { + fmt.Fprintf(os.Stderr, "failed to deserialize the program: %v\n", err) + os.Exit(1) + } + p.Mutate(rs, len(p.Calls)+10, ct, nil) + } fmt.Printf("%s\n", p.Serialize()) } -- cgit mrf-deployment