mirror of
https://github.com/criyle/go-sandbox.git
synced 2025-09-26 23:19:11 +08:00
41 lines
755 B
Go
41 lines
755 B
Go
package ptrace
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
|
|
"github.com/criyle/go-sandbox/pkg/forkexec"
|
|
"github.com/criyle/go-sandbox/ptracer"
|
|
"github.com/criyle/go-sandbox/runner"
|
|
)
|
|
|
|
// Run starts the tracing process
|
|
func (r *Runner) Run(c context.Context) runner.Result {
|
|
ch := &forkexec.Runner{
|
|
Args: r.Args,
|
|
Env: r.Env,
|
|
ExecFile: r.ExecFile,
|
|
RLimits: r.RLimits,
|
|
Files: r.Files,
|
|
WorkDir: r.WorkDir,
|
|
Seccomp: r.Seccomp.SockFprog(),
|
|
Ptrace: true,
|
|
SyncFunc: r.SyncFunc,
|
|
|
|
UnshareCgroupAfterSync: os.Getuid() == 0,
|
|
}
|
|
|
|
th := &tracerHandler{
|
|
ShowDetails: r.ShowDetails,
|
|
Unsafe: r.Unsafe,
|
|
Handler: r.Handler,
|
|
}
|
|
|
|
tracer := ptracer.Tracer{
|
|
Handler: th,
|
|
Runner: ch,
|
|
Limit: r.Limit,
|
|
}
|
|
return tracer.Trace(c)
|
|
}
|