Go package for fexecve(3) and execveat(2)
- Go 100%
| examples | examples: cleanup: consistent dir names | |
| .gitignore | examples: cleanup: consistent dir names | |
| execve.go | Update build directive | |
| execve_freebsd.go | cleanup: syscalls return Errno | |
| execve_linux.go | cleanup: syscalls return Errno | |
| execve_linux_test.go | memfd_create(): fexecve(3) exe from memory | |
| execve_test.go | test: cleanup: remove unnecessary variable | |
| go.mod | execve: Go package for fexecve(3)/execveat(3) | |
| go.sum | execve: Go package for fexecve(3)/execveat(3) | |
| LICENSE | doc: update copyright dates | |
| README.md | examples: fix inverted error check, typos | |
execve
A Go package for fexecve(3) and execveat(2).
EXAMPLES
-
fdexe: embed an executable in a Go binary and run from memory
-
dfdexe: embed a directory of executables in a Go binary and run from memory
-
ioexe: read an executable from stdin and run from memory
Run an executable using a file descriptor
packagemainimport("fmt""os""os/exec""codeberg.org/msantos/execve")funcmain(){iflen(os.Args)<2{fmt.Fprintf(os.Stderr,"usage: <cmd> <args>\n")os.Exit(2)}arg0,err:=exec.LookPath(os.Args[1])iferr!=nil{fmt.Fprintln(os.Stderr,err)os.Exit(127)}fd,err:=os.Open(arg0)iferr!=nil{fmt.Fprintln(os.Stderr,err)os.Exit(1)}iferr:=execve.Fexecve(fd.Fd(),os.Args[1:],os.Environ());err!=nil{fmt.Fprintln(os.Stderr,err)}os.Exit(126)}Execute a script using a file descriptor
packagemainimport("fmt""os""os/exec""syscall""codeberg.org/msantos/execve")funcmain(){iflen(os.Args)<2{fmt.Fprintf(os.Stderr,"usage: <cmd> <args>\n")os.Exit(2)}arg0,err:=exec.LookPath(os.Args[1])iferr!=nil{fmt.Fprintln(os.Stderr,err)os.Exit(127)}fd,err:=syscall.Open(arg0,syscall.O_RDONLY,0)iferr!=nil{fmt.Fprintln(os.Stderr,err)os.Exit(1)}os.Args[1]=fmt.Sprintf("/dev/fd/%d",fd)iferr:=execve.Fexecve(uintptr(fd),os.Args[1:],os.Environ());err!=nil{fmt.Fprintln(os.Stderr,err)}os.Exit(126)}