aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-10-17 10:54:19 +0200
committerDmitry Vyukov <dvyukov@google.com>2017-10-17 10:54:19 +0200
commita8a0b01a8bc49b2088d33c529198d4780f66b94a (patch)
treecaa777ad1a5e105d3864b1128d3ce29dbd73efee /tools
parent22279cf8154f5315711c0563914806bf7f5f6ebc (diff)
tools/syz-mutate: allow to specify target
Diffstat (limited to 'tools')
-rw-r--r--tools/syz-mutate/mutate.go41
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())
}