How to use monitorExecution method of vm Package

Best Syzkaller code snippet using vm.monitorExecution

vm.go

Source:vm.go Github

copy

Full Screen

1// Copyright 2015 syzkaller project authors. All rights reserved.2// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.3// Package vm provides an abstract test machine (VM, physical machine, etc)4// interface for the rest of the system.5// For convenience test machines are subsequently collectively called VMs.6// Package wraps vmimpl package interface with some common functionality7// and higher-level interface.8package vm9import (10 "bytes"11 "fmt"12 "os"13 "time"14 "github.com/google/syzkaller/pkg/osutil"15 "github.com/google/syzkaller/pkg/report"16 "github.com/google/syzkaller/vm/vmimpl"17 // Import all VM implementations, so that users only need to import vm.18 _ "github.com/google/syzkaller/vm/adb"19 _ "github.com/google/syzkaller/vm/gce"20 _ "github.com/google/syzkaller/vm/isolated"21 _ "github.com/google/syzkaller/vm/kvm"22 _ "github.com/google/syzkaller/vm/odroid"23 _ "github.com/google/syzkaller/vm/qemu"24 //Charm start25 . "github.com/google/syzkaller/pkg/log"26 _ "github.com/google/syzkaller/vm/adbemu"27 //Charm end28)29type Pool struct {30 impl vmimpl.Pool31 workdir string32}33type Instance struct {34 impl vmimpl.Instance35 workdir string36 index int37}38type Env vmimpl.Env39var (40 Shutdown = vmimpl.Shutdown41 ErrTimeout = vmimpl.ErrTimeout42 //Charm start43 CharmErr = vmimpl.CharmErr44 //Charm end45)46type BootErrorer interface {47 BootError() (string, []byte)48}49func Create(typ string, env *Env) (*Pool, error) {50 impl, err := vmimpl.Create(typ, (*vmimpl.Env)(env))51 if err != nil {52 return nil, err53 }54 return &Pool{55 impl: impl,56 workdir: env.Workdir,57 }, nil58}59func (pool *Pool) Count() int {60 return pool.impl.Count()61}62//Charm start63func (pool *Pool) Shutdown() {64 pool.impl.Shutdown()65}66//Charm end67func (pool *Pool) Create(index int) (*Instance, error) {68 if index < 0 || index >= pool.Count() {69 return nil, fmt.Errorf("invalid VM index %v (count %v)", index, pool.Count())70 }71 workdir, err := osutil.ProcessTempDir(pool.workdir)72 if err != nil {73 return nil, fmt.Errorf("failed to create instance temp dir: %v", err)74 }75 impl, err := pool.impl.Create(workdir, index)76 if err != nil {77 os.RemoveAll(workdir)78 return nil, err79 }80 return &Instance{81 impl: impl,82 workdir: workdir,83 index: index,84 }, nil85}86func (inst *Instance) Copy(hostSrc string) (string, error) {87 return inst.impl.Copy(hostSrc)88}89func (inst *Instance) Forward(port int) (string, error) {90 return inst.impl.Forward(port)91}92func (inst *Instance) Run(timeout time.Duration, stop <-chan bool, command string) (93 outc <-chan []byte, errc <-chan error, err error) {94 return inst.impl.Run(timeout, stop, command)95}96func (inst *Instance) Close() {97 inst.impl.Close()98 os.RemoveAll(inst.workdir)99}100// MonitorExecution monitors execution of a program running inside of a VM.101// It detects kernel oopses in output, lost connections, hangs, etc.102// outc/errc is what vm.Instance.Run returns, reporter parses kernel output for oopses.103// If canExit is false and the program exits, it is treated as an error.104// Returns a non-symbolized crash report, or nil if no error happens.105func MonitorExecution(outc <-chan []byte, errc <-chan error, reporter report.Reporter, canExit bool) (106 rep *report.Report) {107 var output []byte108 waitForOutput := func() {109 timer := time.NewTimer(10 * time.Second).C110 for {111 select {112 case out, ok := <-outc:113 if !ok {114 return115 }116 output = append(output, out...)117 case <-timer:118 return119 }120 }121 }122 matchPos := 0123 const (124 beforeContext = 1024 << 10125 afterContext = 128 << 10126 )127 extractError := func(defaultError string) *report.Report {128 // Give it some time to finish writing the error message.129 waitForOutput()130 if bytes.Contains(output, []byte("SYZ-FUZZER: PREEMPTED")) {131 return nil132 }133 if !reporter.ContainsCrash(output[matchPos:]) {134 if defaultError == "" {135 if canExit {136 return nil137 }138 defaultError = "lost connection to test machine"139 }140 rep := &report.Report{141 Title: defaultError,142 Output: output,143 }144 return rep145 }146 rep := reporter.Parse(output[matchPos:])147 if rep == nil {148 panic(fmt.Sprintf("reporter.ContainsCrash/Parse disagree:\n%s", output[matchPos:]))149 }150 start := matchPos + rep.StartPos - beforeContext151 if start < 0 {152 start = 0153 }154 end := matchPos + rep.EndPos + afterContext155 if end > len(output) {156 end = len(output)157 }158 rep.Output = output[start:end]159 rep.StartPos += matchPos - start160 rep.EndPos += matchPos - start161 return rep162 }163 lastExecuteTime := time.Now()164 ticker := time.NewTimer(3 * time.Minute)165 tickerFired := false166 for {167 if !tickerFired && !ticker.Stop() {168 <-ticker.C169 }170 tickerFired = false171 ticker.Reset(3 * time.Minute)172 select {173 case err := <-errc:174 switch err {175 case nil:176 // The program has exited without errors,177 // but wait for kernel output in case there is some delayed oops.178 return extractError("")179 //Charm start180 case CharmErr:181 Logf(0, "MonitorExecution [14.1]")182 return extractError("Lost the Charm USB channel (most likely a phone crash)")183 //Charm end184 case ErrTimeout:185 return nil186 default:187 // Note: connection lost can race with a kernel oops message.188 // In such case we want to return the kernel oops.189 return extractError("lost connection to test machine II")190 }191 case out := <-outc:192 output = append(output, out...)193 // syz-fuzzer output194 if bytes.Contains(output[matchPos:], []byte("executing program")) {195 lastExecuteTime = time.Now()196 }197 // syz-execprog output198 if bytes.Contains(output[matchPos:], []byte("executed programs:")) {199 lastExecuteTime = time.Now()200 }201 if reporter.ContainsCrash(output[matchPos:]) {202 return extractError("unknown error")203 }204 if len(output) > 2*beforeContext {205 copy(output, output[len(output)-beforeContext:])206 output = output[:beforeContext]207 }208 matchPos = len(output) - 512209 if matchPos < 0 {210 matchPos = 0211 }212 // In some cases kernel episodically prints something to console,213 // but fuzzer is not actually executing programs.214 // We intentionally produce the same title as no output at all,215 // because frequently it's the same condition.216 //Charm start217 ////if time.Since(lastExecuteTime) > 3*time.Minute {218 if time.Since(lastExecuteTime) > 1*time.Minute {219 //Charm end220 rep := &report.Report{221 Title: "no output from test machine",222 Output: output,223 }224 return rep225 }226 case <-ticker.C:227 tickerFired = true228 rep := &report.Report{229 Title: "no output from test machine",230 Output: output,231 }232 return rep233 case <-Shutdown:234 return nil235 }236 }237}...

Full Screen

Full Screen

monitorExecution

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 if err != nil {4 log.Fatal(err)5 }6 contractAddress := common.HexToAddress("0x7BfB1Bb1eC6fD8b8c9d9C2c3c3f3a2b2B2b2b2b2")7 abi := "[{\"inputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"constructor\"},{\"inputs\": [{\"internalType\": \"uint256\",\"name\": \"_a\",\"type\": \"uint256\"},{\"internalType\": \"uint256\",\"name\": \"_b\",\"type\": \"uint256\"}],\"name\": \"add\",\"outputs\": [{\"internalType\": \"uint256\",\"name\": \"result\",\"type\": \"uint256\"}],\"stateMutability\": \"nonpayable\",\"type\": \"function\"}]"8 instance, err := NewAdd(contractAddress, client)9 if err != nil {10 log.Fatal(err)11 }12 auth := bind.NewKeyedTransactor(common.HexToECDSA("private key"))13 ch := make(chan *types.Receipt)14 go monitorExecution(ch, client, instance, auth)15 fmt.Println("Tx

Full Screen

Full Screen

monitorExecution

Using AI Code Generation

copy

Full Screen

1import (2func stringToUint64(str string) uint64 {3 i, err := strconv.ParseUint(str, 10, 64)4 if err != nil {5 panic(err)6 }7}8func main() {9 runtimeConfig := &runtime.Config{

Full Screen

Full Screen

monitorExecution

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 if err != nil {4 log.Fatal(err)5 }6 blockNumber := big.NewInt(10000000)7 block, err := client.BlockByNumber(context.Background(), blockNumber)8 if err != nil {9 log.Fatal(err)10 }11 txHash := block.Transactions()[0].Hash()12 receipt, err := client.TransactionReceipt(context.Background(), txHash)13 if err != nil {14 log.Fatal(err)15 }16 tx, isPending, err := client.TransactionByHash(context.Background(), txHash)17 if err != nil {18 log.Fatal(err)19 }20 if isPending {21 log.Fatal("Transaction is pending")22 }

Full Screen

Full Screen

monitorExecution

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 if err != nil {4 fmt.Println(err)5 }6 contractAddress := common.HexToAddress("0x4c6a9e6f")7 contractAbi, err := abi.JSON(strings.NewReader(`[{"constant":false,"inputs":[{"name":"_num","type":"uint256"}],"name":"setNumber","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_num","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]`))8 if err != nil {9 fmt.Println(err)10 }11 contractInstance := bind.NewBoundContract(contractAddress, contractAbi, nil, nil, nil)12 txHash := common.HexToHash("0x9c2c9a9a6b7d1b1a1e1e8b8f6d6d6c6a6a6a6b6b6b6b6c6c6c6a6a6a6a6a6a6a")13 tx, _, err := client.TransactionByHash(context.Background(), txHash)

Full Screen

Full Screen

monitorExecution

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 vm := vm.NewVM()4 state := state.New(common.Hash{}, state.NewDatabase(nil))5 block := types.NewBlockWithHeader(&types.Header{6 Coinbase: common.Address{},7 Number: big.NewInt(1),8 Extra: []byte{},9 Time: big.NewInt(1),10 Difficulty: big.NewInt(1),11 Root: common.Hash{},12 })13 tx := types.NewTransaction(0, common.Address{}, big.NewInt(0), 1000000000000, big.NewInt(0), nil)14 env := core.NewEVMContext(tx, block.Header(), nil, nil)15 execution := vm.NewExecution(env, nil, nil, params.MainnetChainConfig, vm.Config{})16 contract := core.NewContract(crypto.PubkeyToAddress(tx.From().PublicKey), tx.To(), tx.Value(), tx.Gas())17 jumpTable := jump_table.NewJumpTable()18 instructionSet := instructions.NewInstructionSet()

Full Screen

Full Screen

monitorExecution

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 env := vm.NewEVM(vm.Context{}, state.New(common.Hash{}), params.TestChainConfig, vm.Config{})4 contract := vm.NewContract(&types.Message{5 From: common.HexToAddress("0x0"),6 To: &common.HexToAddress("0x0"),7 GasPrice: big.NewInt(0),8 Value: big.NewInt(0),9 Data: []byte{},10 }, &types.Header{11 }, nil)

Full Screen

Full Screen

monitorExecution

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 vm := runtime.NewVM()4 monitor := runtime.NewMonitor()5 execution := runtime.NewExecution()6 executionContext := runtime.NewExecutionContext()7 execution.SetContext(executionContext)8 monitor.SetExecution(execution)9 vm.SetMonitor(monitor)10 vm.SetExecution(execution)11 vm.SetExecutionContext(executionContext)12 thread := runtime.NewThread()13 executionContext.SetThread(thread)14 thread.SetContext(executionContext)15 frame := runtime.NewFrame()16 executionContext.SetFrame(frame)17 frame.SetContext(executionContext)18 frame.SetThread(thread)19 thread.SetFrame(frame)20 frame.SetExecution(execution)21 frame.SetContext(executionContext)22 monitor.SetExecution(execution)23 monitor.SetContext(executionContext)24 monitor.SetThread(thread)25 monitor.SetFrame(frame)26 execution.SetMonitor(monitor)27 executionContext.SetMonitor(monitor)28 thread.SetMonitor(monitor)29 frame.SetMonitor(monitor)30 execution.SetVM(vm)31 execution.SetContext(executionContext)32 execution.SetThread(thread)33 execution.SetFrame(frame)

Full Screen

Full Screen

monitorExecution

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println("main start")4 vm := runtime.NewVM()5 vm.SetMonitorExecution(true)6 compiled, err := vm.Compile("test.go", `7func main() {8 fmt.Println("Hello, playground")9}10 if err != nil {11 fmt.Println(err)12 }13 _, err = vm.Run(compiled)14 if err != nil {15 fmt.Println(err)16 }17 fmt.Println("execution time:", vm.ExecutionTime())18 fmt.Println("main end")19}20import (21func main() {22 fmt.Println("main start")23 vm := runtime.NewVM()24 vm.SetMonitorExecution(true)25 compiled, err := vm.Compile("test.go", `26func main() {27 fmt.Println("Hello, playground")28 time.Sleep(1 * time.Second)29}30 if err != nil {31 fmt.Println(err)32 }33 _, err = vm.Run(compiled)34 if err != nil {35 fmt.Println(err)36 }37 fmt.Println("execution time:", vm.ExecutionTime())38 fmt.Println("main end")39}40import (41func main() {42 fmt.Println("main start")43 vm := runtime.NewVM()44 vm.SetMonitorExecution(true)

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.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful