diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-10-17 10:54:19 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-10-17 10:54:19 +0200 |
| commit | a8a0b01a8bc49b2088d33c529198d4780f66b94a (patch) | |
| tree | caa777ad1a5e105d3864b1128d3ce29dbd73efee /tools | |
| parent | 22279cf8154f5315711c0563914806bf7f5f6ebc (diff) | |
tools/syz-mutate: allow to specify target
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/syz-mutate/mutate.go | 41 |
1 files changed, 21 insertions, 20 deletions
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()) } |
