q/src/memfile/Exec_linux.go
Eduard Urbach a7fd4172b9
All checks were successful
/ test (push) Successful in 16s
Implemented running executables in memory
2025-07-06 20:25:16 +02:00

47 lines
No EOL
759 B
Go

//go:build linux
package memfile
import (
"os"
"strconv"
"syscall"
"unsafe"
"golang.org/x/sys/unix"
)
// Exec executes an in-memory file.
func Exec(file *os.File) error {
empty, err := syscall.BytePtrFromString("")
if err != nil {
return err
}
argv := []string{"/proc/self/fd/" + strconv.Itoa(int(file.Fd()))}
argvp, err := syscall.SlicePtrFromStrings(argv)
if err != nil {
return err
}
envv := os.Environ()
envvp, err := syscall.SlicePtrFromStrings(envv)
if err != nil {
return err
}
_, _, errno := syscall.Syscall6(
unix.SYS_EXECVEAT,
uintptr(file.Fd()),
uintptr(unsafe.Pointer(empty)),
uintptr(unsafe.Pointer(&argvp[0])),
uintptr(unsafe.Pointer(&envvp[0])),
uintptr(unix.AT_EMPTY_PATH),
0,
)
return errno
}