How to use preloadCorpus method of main Package

Best Syzkaller code snippet using main.preloadCorpus

manager.go

Source:manager.go Github

copy

Full Screen

...177 usedFiles: make(map[string]time.Time),178 saturatedCalls: make(map[string]bool),179 }180 //初始化corpus.db Manager HTTP PRC prometheus参数 dash181 mgr.preloadCorpus() //提前加载语料库182 mgr.initStats() // Initializes prometheus variables.183 mgr.initHTTP() // Creates HTTP server.184 mgr.collectUsedFiles() //collect 当前使用的文件,记录这些文件的Moditime185 // Create RPC server for fuzzers.186 mgr.serv, err = startRPCServer(mgr)187 if err != nil {188 log.Fatalf("failed to create rpc server: %v", err)189 }190 //Create Dashboard for fuzzer191 if cfg.DashboardAddr != "" {192 mgr.dash, err = dashapi.New(cfg.DashboardClient, cfg.DashboardAddr, cfg.DashboardKey)193 if err != nil {194 log.Fatalf("failed to create dashapi connection: %v", err)195 }196 }197 //日志记录:启动一个线程来接收vm传过来的消息,并打印198 go func() {199 for lastTime := time.Now(); ; {200 time.Sleep(10 * time.Second)201 now := time.Now()202 diff := now.Sub(lastTime)203 lastTime = now204 mgr.mu.Lock()205 if mgr.firstConnect.IsZero() { //如果还没有连接206 mgr.mu.Unlock()207 continue208 }209 mgr.fuzzingTime += diff * time.Duration(atomic.LoadUint32(&mgr.numFuzzing))210 executed := mgr.stats.execTotal.get()211 crashes := mgr.stats.crashes.get()212 corpusCover := mgr.stats.corpusCover.get()213 corpusSignal := mgr.stats.corpusSignal.get()214 maxSignal := mgr.stats.maxSignal.get()215 mgr.mu.Unlock()216 numReproducing := atomic.LoadUint32(&mgr.numReproducing)217 numFuzzing := atomic.LoadUint32(&mgr.numFuzzing)218 log.Logf(0, "VMs %v, executed %v, cover %v, signal %v/%v, crashes %v, repro %v",219 numFuzzing, executed, corpusCover, corpusSignal, maxSignal, crashes, numReproducing)220 }221 }()222 //flagBench定期将分析结果写入一个文件,包括VM状态,crash数量,等信息223 if *flagBench != "" {224 f, err := os.OpenFile(*flagBench, os.O_WRONLY|os.O_CREATE|os.O_EXCL, osutil.DefaultFilePerm)225 if err != nil {226 log.Fatalf("failed to open bench file: %v", err)227 }228 go func() {229 for {230 time.Sleep(time.Minute)231 vals := mgr.stats.all()232 mgr.mu.Lock()233 if mgr.firstConnect.IsZero() {234 mgr.mu.Unlock()235 continue236 }237 mgr.minimizeCorpus()238 vals["corpus"] = uint64(len(mgr.corpus))239 vals["uptime"] = uint64(time.Since(mgr.firstConnect)) / 1e9240 vals["fuzzing"] = uint64(mgr.fuzzingTime) / 1e9241 mgr.mu.Unlock()242 data, err := json.MarshalIndent(vals, "", " ")243 if err != nil {244 log.Fatalf("failed to serialize bench data")245 }246 if _, err := f.Write(append(data, '\n')); err != nil {247 log.Fatalf("failed to write bench data")248 }249 }250 }()251 }252 //开启dash253 if mgr.dash != nil {254 go mgr.dashboardReporter()255 }256 osutil.HandleInterrupts(vm.Shutdown)257 if mgr.vmPool == nil {258 log.Logf(0, "no VMs started (type=none)")259 log.Logf(0, "you are supposed to start syz-fuzzer manually as:")260 log.Logf(0, "syz-fuzzer -manager=manager.ip:%v [other flags as necessary]", mgr.serv.port)261 <-vm.Shutdown262 return263 }264 //最后调用vmLoop265 mgr.vmLoop()266}267type RunResult struct {268 idx int269 crash *Crash270 err error271}272type ReproResult struct {273 instances []int274 report0 *report.Report // the original report we started reproducing275 res *repro.Result276 stats *repro.Stats277 err error278 hub bool // repro came from hub279}280// Manager needs to be refactored (#605).281// nolint: gocyclo, gocognit, funlen282func (mgr *Manager) vmLoop() {283 log.Logf(0, "booting test machines...")284 log.Logf(0, "wait for the connection from test machine...")285 instancesPerRepro := 4286 vmCount := mgr.vmPool.Count()287 maxReproVMs := vmCount - mgr.cfg.FuzzingVMs288 //设定最多用于Repro的VM个数289 if instancesPerRepro > maxReproVMs && maxReproVMs > 0 {290 instancesPerRepro = maxReproVMs291 }292 bootInstance := make(chan int)293 go func() {294 //启动instance295 for i := 0; i < vmCount; i++ {296 bootInstance <- i297 time.Sleep(10 * time.Second * mgr.cfg.Timeouts.Scale)298 }299 }()300 //初始化pendingRepro reproducing reproinstances301 var instances []int302 runDone := make(chan *RunResult, 1)303 pendingRepro := make(map[*Crash]bool) //等待Repro的Crash304 reproducing := make(map[string]bool) //正在进行repro的305 reproInstances := 0306 var reproQueue []*Crash307 reproDone := make(chan *ReproResult, 1)308 stopPending := false309 shutdown := vm.Shutdown310 //还可以启动新的instances,开始Repro311 for shutdown != nil || len(instances) != vmCount {312 mgr.mu.Lock()313 phase := mgr.phase314 mgr.mu.Unlock()315 //将Crash从pending加入到reproducing中316 for crash := range pendingRepro {317 if reproducing[crash.Title] {318 continue319 }320 delete(pendingRepro, crash)321 if !mgr.needRepro(crash) {322 continue323 }324 log.Logf(1, "loop: add to repro queue '%v'", crash.Title)325 reproducing[crash.Title] = true326 reproQueue = append(reproQueue, crash)327 }328 log.Logf(1, "loop: phase=%v shutdown=%v instances=%v/%v %+v repro: pending=%v reproducing=%v queued=%v",329 phase, shutdown == nil, len(instances), vmCount, instances,330 len(pendingRepro), len(reproducing), len(reproQueue))331 canRepro := func() bool { //canRepro为确定是否可以进行Repro操作332 return phase >= phaseTriagedHub && len(reproQueue) != 0 &&333 reproInstances+instancesPerRepro <= maxReproVMs //没看明白,instancesPerRepro是什么不是很了解334 }335 if shutdown != nil {336 //可以复现并且有剩余的instance337 for canRepro() && len(instances) >= instancesPerRepro {338 last := len(reproQueue) - 1339 crash := reproQueue[last]340 reproQueue[last] = nil341 reproQueue = reproQueue[:last]342 //将vm分为vmIndexes和instances两个部分,Indexes进行crash的复现,instances进行实例运行343 vmIndexes := append([]int{}, instances[len(instances)-instancesPerRepro:]...)344 instances = instances[:len(instances)-instancesPerRepro]345 reproInstances += instancesPerRepro346 atomic.AddUint32(&mgr.numReproducing, 1)347 log.Logf(1, "loop: starting repro of '%v' on instances %+v", crash.Title, vmIndexes)348 go func() {349 features := mgr.checkResult.Features350 //进行Repro复现351 res, stats, err := repro.Run(crash.Output, mgr.cfg, features, mgr.reporter, mgr.vmPool, vmIndexes)352 reproDone <- &ReproResult{353 instances: vmIndexes,354 report0: crash.Report,355 res: res,356 stats: stats,357 err: err,358 hub: crash.hub,359 }360 }()361 }362 //没有可以复现的但是有剩余的instances363 for !canRepro() && len(instances) != 0 {364 last := len(instances) - 1365 idx := instances[last]366 instances = instances[:last]367 log.Logf(1, "loop: starting instance %v", idx)368 go func() {369 //调用mgr.runInstanceInner,370 //mgr.runInstanceInner()调用了FuzzerCmd()启动fuzz;371 //又调用MonitorExecution()监控信息并返回Report对象372 //返回crash信息373 crash, err := mgr.runInstance(idx)374 //结果处理375 runDone <- &RunResult{idx, crash, err}376 }()377 }378 }379 var stopRequest chan bool380 if !stopPending && canRepro() {381 stopRequest = mgr.vmStop382 }383 wait:384 select {385 case idx := <-bootInstance:386 instances = append(instances, idx)387 case stopRequest <- true:388 log.Logf(1, "loop: issued stop request")389 stopPending = true390 case res := <-runDone:391 log.Logf(1, "loop: instance %v finished, crash=%v", res.idx, res.crash != nil)392 if res.err != nil && shutdown != nil {393 log.Logf(0, "%v", res.err)394 }395 stopPending = false396 instances = append(instances, res.idx)397 // On shutdown qemu crashes with "qemu: terminating on signal 2",398 // which we detect as "lost connection". Don't save that as crash.399 if shutdown != nil && res.crash != nil {400 needRepro := mgr.saveCrash(res.crash)401 if needRepro {402 log.Logf(1, "loop: add pending repro for '%v'", res.crash.Title)403 pendingRepro[res.crash] = true404 }405 }406 case res := <-reproDone:407 atomic.AddUint32(&mgr.numReproducing, ^uint32(0))408 crepro := false409 title := ""410 if res.res != nil {411 crepro = res.res.CRepro412 title = res.res.Report.Title413 }414 log.Logf(1, "loop: repro on %+v finished '%v', repro=%v crepro=%v desc='%v'",415 res.instances, res.report0.Title, res.res != nil, crepro, title)416 if res.err != nil {417 log.Logf(0, "repro failed: %v", res.err)418 }419 delete(reproducing, res.report0.Title)420 instances = append(instances, res.instances...)421 reproInstances -= instancesPerRepro422 if res.res == nil {423 if !res.hub {424 mgr.saveFailedRepro(res.report0, res.stats)425 }426 } else {427 mgr.saveRepro(res.res, res.stats, res.hub)428 }429 case <-shutdown:430 log.Logf(1, "loop: shutting down...")431 shutdown = nil432 case crash := <-mgr.hubReproQueue:433 log.Logf(1, "loop: get repro from hub")434 pendingRepro[crash] = true435 case reply := <-mgr.needMoreRepros:436 reply <- phase >= phaseTriagedHub &&437 len(reproQueue)+len(pendingRepro)+len(reproducing) == 0438 goto wait439 case reply := <-mgr.reproRequest:440 repros := make(map[string]bool)441 for title := range reproducing {442 repros[title] = true443 }444 reply <- repros445 goto wait446 }447 }448}449func (mgr *Manager) preloadCorpus() {450 log.Logf(0, "loading corpus...")451 corpusDB, err := db.Open(filepath.Join(mgr.cfg.Workdir, "corpus.db"))452 if err != nil {453 log.Fatalf("failed to open corpus database: %v", err)454 }455 mgr.corpusDB = corpusDB456 if seedDir := filepath.Join(mgr.cfg.Syzkaller, "sys", mgr.cfg.TargetOS, "test"); osutil.IsExist(seedDir) {457 seeds, err := ioutil.ReadDir(seedDir)458 if err != nil {459 log.Fatalf("failed to read seeds dir: %v", err)460 }461 for _, seed := range seeds {462 data, err := ioutil.ReadFile(filepath.Join(seedDir, seed.Name()))463 if err != nil {...

Full Screen

Full Screen

preloadCorpus

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println("Starting main")4 main.PreloadCorpus()5 fmt.Println("Ending main")6}7import (8func main() {9 fmt.Println("Starting main")10 main.PreloadCorpus()11 fmt.Println("Ending main")12}13import (14func main() {15 fmt.Println("Starting main")16 main.PreloadCorpus()17 fmt.Println("Ending main")18}19import (20func main() {21 fmt.Println("Starting main")22 main.PreloadCorpus()23 fmt.Println("Ending main")24}25import (26func main() {27 fmt.Println("Starting main")28 main.PreloadCorpus()29 fmt.Println("Ending main")30}31import (32func main() {33 fmt.Println("Starting main")34 main.PreloadCorpus()35 fmt.Println("Ending main")36}37import (38func main() {39 fmt.Println("Starting main")40 main.PreloadCorpus()41 fmt.Println("Ending main")42}43import (44func main() {45 fmt.Println("Starting main")46 main.PreloadCorpus()47 fmt.Println("Ending main")48}49import (50func main() {51 fmt.Println("Starting main")52 main.PreloadCorpus()53 fmt.Println("Ending main")54}

Full Screen

Full Screen

preloadCorpus

Using AI Code Generation

copy

Full Screen

1import (2type Word struct {3}4type WordList struct {5}6func main() {7 wordList.preloadCorpus("corpus.txt")8 fmt.Println(wordList.words)9}10func (wordList *WordList) preloadCorpus(corpus string) {11 file, err := os.Open(corpus)12 if err != nil {13 fmt.Println(err)14 }15 defer file.Close()16 scanner := bufio.NewScanner(file)17 scanner.Split(bufio.ScanLines)18 for scanner.Scan() {19 fmt.Println(scanner.Text())20 words := strings.Split(scanner.Text(), " ")21 for _, word := range words {22 fmt.Println(word)23 wordList.words = append(wordList.words, word)24 }25 }26}27import (28type Word struct {29}30type WordList struct {31}32func main() {33 wordList.preloadCorpus("corpus.txt")34 fmt.Println(wordList.words)35}36func (wordList *WordList) preloadCorpus(corpus string) {37 file, err := os.Open(corpus)38 if err != nil {39 fmt.Println(err)40 }41 defer file.Close()42 scanner := bufio.NewScanner(file)43 scanner.Split(bufio.ScanLines)44 for scanner.Scan() {45 fmt.Println(scanner.Text())46 words := strings.Split(scanner.Text(), " ")47 for _, word := range words {48 fmt.Println(word)49 wordList.words = append(wordList.words, word)50 }51 }52}53import (54type Word struct {55}56type WordList struct {57}58func main() {59 wordList.preloadCorpus("corpus.txt")60 fmt.Println(wordList.words)61}62func (

Full Screen

Full Screen

preloadCorpus

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 m := new(main)4 m.preloadCorpus()5 fmt.Println(m.corpus)6}7type main struct {8}9func (m *main) preloadCorpus() {10 m.corpus = strings.Repeat("a", 1000000)11}

Full Screen

Full Screen

preloadCorpus

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 file, err := os.Create("preload.txt")4 if err != nil {5 log.Fatal(err)6 }7 defer file.Close()8 w := bufio.NewWriter(file)9 fmt.Fprint(w, "preloadCorpus")10 w.Flush()11}12import (13func main() {14 file, err := os.Create("preload.txt")15 if err != nil {16 log.Fatal(err)17 }18 defer file.Close()19 w := bufio.NewWriter(file)20 fmt.Fprint(w, "preloadCorpus")21 w.Flush()22}

Full Screen

Full Screen

preloadCorpus

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 corpus := new(Corpus)4 corpus.preloadCorpus(path)5 reader := bufio.NewReader(os.Stdin)6 fmt.Print("Enter query: ")7 query, _ := reader.ReadString('\n')8 query = strings.TrimSuffix(query, "\n")9 fmt.Print("Enter number of results: ")10 numResults, _ := reader.ReadString('\n')11 numResults = strings.TrimSuffix(numResults, "\n")12 numResultsInt, err := strconv.Atoi(numResults)13 if err != nil {14 log.Fatal(err)15 }16 results := corpus.query(query, numResultsInt)17 for i, result := range results {18 fmt.Println(i+1, result)19 }20}

Full Screen

Full Screen

preloadCorpus

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 m := new(Main)4 m.preloadCorpus()5 fmt.Println("Enter the query")6 reader := bufio.NewReader(os.Stdin)7 query, _ := reader.ReadString('\n')8 query = strings.TrimRight(query, "9 m.search(query)10}11import (12func main() {13 m := new(Main)14 fmt.Println("Enter the query")15 reader := bufio.NewReader(os.Stdin)16 query, _ := reader.ReadString('\n')17 query = strings.TrimRight(query, "18 m.search(query)19}20import (21func main() {22 m := new(Main)23 fmt.Println("Enter the query")24 reader := bufio.NewReader(os.Stdin)25 query, _ := reader.ReadString('\n')26 query = strings.TrimRight(query, "27 m.search(query)28}29import (30func main() {31 m := new(Main)32 fmt.Println("Enter the

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