github.com/pkujhd/goloader@v0.0.0-20240411034752-1a28096bd7bd/mmap/mmap_unix.go (about) 1 //go:build (darwin && !arm64) || dragonfly || freebsd || (linux && !amd64) || openbsd || solaris || netbsd 2 // +build darwin,!arm64 dragonfly freebsd linux,!amd64 openbsd solaris netbsd 3 4 package mmap 5 6 import ( 7 "os" 8 "syscall" 9 ) 10 11 func MakeThreadJITCodeExecutable(ptr uintptr, len int) { 12 } 13 14 func Mmap(size int) ([]byte, error) { 15 data, err := syscall.Mmap( 16 0, 17 0, 18 size, 19 syscall.PROT_READ|syscall.PROT_WRITE|syscall.PROT_EXEC, 20 syscall.MAP_PRIVATE|syscall.MAP_ANON) 21 if err != nil { 22 err = os.NewSyscallError("syscall.Mmap", err) 23 } 24 return data, err 25 } 26 27 func MmapData(size int) ([]byte, error) { 28 data, err := syscall.Mmap( 29 0, 30 0, 31 size, 32 syscall.PROT_READ|syscall.PROT_WRITE, 33 syscall.MAP_PRIVATE|syscall.MAP_ANON) 34 if err != nil { 35 err = os.NewSyscallError("syscall.Mmap", err) 36 } 37 return data, err 38 } 39 40 func Munmap(b []byte) (err error) { 41 err = syscall.Munmap(b) 42 if err != nil { 43 err = os.NewSyscallError("syscall.Munmap", err) 44 } 45 return 46 }