How to use generateArgs method of prog Package

Best Syzkaller code snippet using prog.generateArgs

rand.go

Source:rand.go Github

copy

Full Screen

...372 c := &Call{373 Meta: meta,374 Ret: MakeReturnArg(meta.Ret),375 }376 c.Args, calls = r.generateArgs(s, meta.Args)377 r.target.assignSizesCall(c)378 calls = append(calls, c)379 for _, c1 := range calls {380 r.target.SanitizeCall(c1)381 }382 return calls383}384// GenerateAllSyzProg generates a program that contains all pseudo syz_ calls for testing.385func (target *Target) GenerateAllSyzProg(rs rand.Source) *Prog {386 p := &Prog{387 Target: target,388 }389 r := newRand(target, rs)390 s := newState(target, nil)391 handled := make(map[string]bool)392 for _, meta := range target.Syscalls {393 if !strings.HasPrefix(meta.CallName, "syz_") || handled[meta.CallName] {394 continue395 }396 handled[meta.CallName] = true397 calls := r.generateParticularCall(s, meta)398 for _, c := range calls {399 s.analyze(c)400 p.Calls = append(p.Calls, c)401 }402 }403 if err := p.validate(); err != nil {404 panic(err)405 }406 return p407}408// GenerateSimpleProg generates the simplest non-empty program for testing409// (e.g. containing a single mmap).410func (target *Target) GenerateSimpleProg() *Prog {411 return &Prog{412 Target: target,413 Calls: []*Call{target.MakeMmap(0, target.PageSize)},414 }415}416func (target *Target) GenerateUberMmapProg() *Prog {417 return &Prog{418 Target: target,419 Calls: []*Call{target.MakeMmap(0, target.NumPages*target.PageSize)},420 }421}422func (r *randGen) generateArgs(s *state, types []Type) ([]Arg, []*Call) {423 var calls []*Call424 args := make([]Arg, len(types))425 // Generate all args. Size args have the default value 0 for now.426 for i, typ := range types {427 arg, calls1 := r.generateArg(s, typ)428 if arg == nil {429 panic(fmt.Sprintf("generated arg is nil for type '%v', types: %+v", typ.Name(), types))430 }431 args[i] = arg432 calls = append(calls, calls1...)433 }434 return args, calls435}436func (r *randGen) generateArg(s *state, typ Type) (arg Arg, calls []*Call) {437 return r.generateArgImpl(s, typ, false)438}439func (r *randGen) generateArgImpl(s *state, typ Type, ignoreSpecial bool) (arg Arg, calls []*Call) {440 if typ.Dir() == DirOut {441 // No need to generate something interesting for output scalar arguments.442 // But we still need to generate the argument itself so that it can be referenced443 // in subsequent calls. For the same reason we do generate pointer/array/struct444 // output arguments (their elements can be referenced in subsequent calls).445 switch typ.(type) {446 case *IntType, *FlagsType, *ConstType, *ProcType,447 *VmaType, *ResourceType:448 return r.target.defaultArg(typ), nil449 }450 }451 if typ.Optional() && r.oneOf(5) {452 return r.target.defaultArg(typ), nil453 }454 // Allow infinite recursion for optional pointers.455 if pt, ok := typ.(*PtrType); ok && typ.Optional() {456 switch pt.Type.(type) {457 case *StructType, *ArrayType, *UnionType:458 name := pt.Type.Name()459 r.recDepth[name]++460 defer func() {461 r.recDepth[name]--462 if r.recDepth[name] == 0 {463 delete(r.recDepth, name)464 }465 }()466 if r.recDepth[name] >= 3 {467 return MakeNullPointerArg(typ), nil468 }469 }470 }471 if !ignoreSpecial && typ.Dir() != DirOut {472 switch typ.(type) {473 case *StructType, *UnionType:474 if gen := r.target.SpecialTypes[typ.Name()]; gen != nil {475 return gen(&Gen{r, s}, typ, nil)476 }477 }478 }479 return typ.generate(r, s)480}481func (a *ResourceType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {482 switch {483 case r.nOutOf(1000, 1011):484 // Get an existing resource.485 var allres []*ResultArg486 for name1, res1 := range s.resources {487 if r.target.isCompatibleResource(a.Desc.Name, name1) ||488 r.oneOf(20) && r.target.isCompatibleResource(a.Desc.Kind[0], name1) {489 allres = append(allres, res1...)490 }491 }492 if len(allres) != 0 {493 arg = MakeResultArg(a, allres[r.Intn(len(allres))], 0)494 } else {495 arg, calls = r.createResource(s, a)496 }497 case r.nOutOf(10, 11):498 // Create a new resource.499 arg, calls = r.createResource(s, a)500 default:501 special := a.SpecialValues()502 arg = MakeResultArg(a, nil, special[r.Intn(len(special))])503 }504 return arg, calls505}506func (a *BufferType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {507 switch a.Kind {508 case BufferBlobRand, BufferBlobRange:509 sz := r.randBufLen()510 if a.Kind == BufferBlobRange {511 sz = r.randRange(a.RangeBegin, a.RangeEnd)512 }513 if a.Dir() == DirOut {514 return MakeOutDataArg(a, sz), nil515 }516 data := make([]byte, sz)517 for i := range data {518 data[i] = byte(r.Intn(256))519 }520 return MakeDataArg(a, data), nil521 case BufferString:522 data := r.randString(s, a)523 if a.Dir() == DirOut {524 return MakeOutDataArg(a, uint64(len(data))), nil525 }526 return MakeDataArg(a, data), nil527 case BufferFilename:528 if a.Dir() == DirOut {529 var sz uint64530 switch {531 case !a.Varlen():532 sz = a.Size()533 case r.nOutOf(1, 3):534 sz = r.rand(100)535 case r.nOutOf(1, 2):536 sz = 108 // UNIX_PATH_MAX537 default:538 sz = 4096 // PATH_MAX539 }540 return MakeOutDataArg(a, sz), nil541 }542 return MakeDataArg(a, []byte(r.filename(s, a))), nil543 case BufferText:544 if a.Dir() == DirOut {545 return MakeOutDataArg(a, uint64(r.Intn(100))), nil546 }547 return MakeDataArg(a, r.generateText(a.Text)), nil548 default:549 panic("unknown buffer kind")550 }551}552func (a *VmaType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {553 npages := r.randPageCount()554 if a.RangeBegin != 0 || a.RangeEnd != 0 {555 npages = a.RangeBegin + uint64(r.Intn(int(a.RangeEnd-a.RangeBegin+1)))556 }557 return r.allocVMA(s, a, npages), nil558}559func (a *FlagsType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {560 return MakeConstArg(a, r.flags(a.Vals)), nil561}562func (a *ConstType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {563 return MakeConstArg(a, a.Val), nil564}565func (a *IntType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {566 v := r.randInt()567 switch a.Kind {568 case IntFileoff:569 switch {570 case r.nOutOf(90, 101):571 v = 0572 case r.nOutOf(10, 11):573 v = r.rand(100)574 default:575 v = r.randInt()576 }577 case IntRange:578 v = r.randRangeInt(a.RangeBegin, a.RangeEnd)579 }580 return MakeConstArg(a, v), nil581}582func (a *ProcType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {583 return MakeConstArg(a, r.rand(int(a.ValuesPerProc))), nil584}585func (a *ArrayType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {586 var count uint64587 switch a.Kind {588 case ArrayRandLen:589 count = r.randArrayLen()590 case ArrayRangeLen:591 count = r.randRange(a.RangeBegin, a.RangeEnd)592 }593 var inner []Arg594 for i := uint64(0); i < count; i++ {595 arg1, calls1 := r.generateArg(s, a.Type)596 inner = append(inner, arg1)597 calls = append(calls, calls1...)598 }599 return MakeGroupArg(a, inner), calls600}601func (a *StructType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {602 args, calls := r.generateArgs(s, a.Fields)603 group := MakeGroupArg(a, args)604 return group, calls605}606func (a *UnionType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {607 optType := a.Fields[r.Intn(len(a.Fields))]608 opt, calls := r.generateArg(s, optType)609 return MakeUnionArg(a, opt), calls610}611func (a *PtrType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {612 inner, calls := r.generateArg(s, a.Type)613 arg = r.allocAddr(s, a, inner.Size(), inner)614 return arg, calls615}616func (a *LenType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {...

Full Screen

Full Screen

generateArgs

Using AI Code Generation

copy

Full Screen

1import (2type prog struct {3}4func (p prog) generateArgs() {5 p.args = []string{}6}7func (p prog) run() {8 cmd := exec.Command(p.name, p.args...)9 err := cmd.Run()10 if err != nil {11 fmt.Println(err)12 }13}14func main() {15 p := prog{name: "ls"}16 p.generateArgs()17 p.run()18 p = prog{name: "echo"}19 p.generateArgs()20 p.run()21 p = prog{name: "echo"}22 p.generateArgs()

Full Screen

Full Screen

generateArgs

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 p := program.Prog{}4 p.GenerateArgs()5 fmt.Println(p.Result)6}7import (8func main() {9 p := program.Prog{}10 p.GenerateArgs()11 fmt.Println(p.Result)12}13import (14func main() {15 p := program.Prog{}16 p.GenerateArgs()17 fmt.Println(p.Result)18}19import (20func main() {21 p := program.Prog{}22 p.GenerateArgs()23 fmt.Println(p.Result)24}25import (26func main() {27 p := program.Prog{}28 p.GenerateArgs()29 fmt.Println(p.Result)30}31import (32func main() {33 p := program.Prog{}34 p.GenerateArgs()35 fmt.Println(p.Result)36}37import (38func main() {39 p := program.Prog{}40 p.GenerateArgs()41 fmt.Println(p.Result)42}

Full Screen

Full Screen

generateArgs

Using AI Code Generation

copy

Full Screen

1import (2func main() {3flag.StringVar(&p.name, "name", "gopher", "help message for flagname")4flag.IntVar(&p.age, "age", 5, "help message for flagage")5flag.Parse()6p.generateArgs()7}8import (9type prog struct {10}11func (p *prog) generateArgs() {12fmt.Println("name:", p.name)13fmt.Println("age:", p.age)14}

Full Screen

Full Screen

generateArgs

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 p := prog{}4 args := p.generateArgs()5 p.execute(args)6}7type prog struct {8}9func (p prog) generateArgs() []string {10 args := []string{"-l", "-a"}11}12func (p prog) execute(args []string) {13 cmd := exec.Command("ls", args...)14 out, err := cmd.Output()15 if err != nil {16 fmt.Println(err)17 os.Exit(1)18 }19 fmt.Println(string(out))20}21import (22func main() {23 p := prog{}24 args := p.generateArgs()25 p.execute(args)26}27type prog struct {28}29func (p prog) generateArgs() []string {30 args := []string{"-l", "-a"}31}32func (p prog) execute(args []string) {33 cmd := exec.Command("ls", args...)34 out, err := cmd.Output()35 if err != nil {36 fmt.Println(err)37 os.Exit(1)38 }39 fmt.Println(string(out))40}41import (42func main() {43 p := prog{}44 args := p.generateArgs()45 p.execute(args)46}47type prog struct {48}49func (p prog) generateArgs() []string {

Full Screen

Full Screen

generateArgs

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 p := new(prog)4 p.generateArgs()5 p.execProg()6}7type prog struct {8}9func (p *prog) generateArgs() {10 randNum := rand.Intn(10) + 111 randNumStr := strconv.Itoa(randNum)12 p.args = append(p.args, randNumStr)13}14func (p *prog) execProg() {15 cmd := exec.Command("go", append([]string{"run", "1.go"}, p.args...)...)16 err := cmd.Run()17 if err != nil {18 fmt.Println(err)19 }20}21$ for i in {

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Syzkaller automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful