1
0
Fork
You've already forked execve
0
Go package for fexecve(3) and execveat(2)
  • Go 100%
2025年12月24日 09:11:19 -05:00
examples examples: cleanup: consistent dir names 2023年02月06日 06:20:18 -05:00
.gitignore examples: cleanup: consistent dir names 2023年02月06日 06:20:18 -05:00
execve.go Update build directive 2025年12月24日 09:11:19 -05:00
execve_freebsd.go cleanup: syscalls return Errno 2022年11月09日 07:46:33 -05:00
execve_linux.go cleanup: syscalls return Errno 2022年11月09日 07:46:33 -05:00
execve_linux_test.go memfd_create(): fexecve(3) exe from memory 2022年11月23日 07:27:15 -05:00
execve_test.go test: cleanup: remove unnecessary variable 2025年10月20日 07:34:37 -04:00
go.mod execve: Go package for fexecve(3)/execveat(3) 2022年10月15日 07:00:34 -04:00
go.sum execve: Go package for fexecve(3)/execveat(3) 2022年10月15日 07:00:34 -04:00
LICENSE doc: update copyright dates 2025年10月21日 07:43:04 -04:00
README.md examples: fix inverted error check, typos 2022年11月24日 06:43:55 -05:00

execve

Go Reference

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)}