...
1
2
3 package platform
4
5 import (
6 "syscall"
7 "unsafe"
8 )
9
10 const (
11 mmapProtAMD64 = syscall.PROT_READ | syscall.PROT_WRITE | syscall.PROT_EXEC
12 mmapProtARM64 = syscall.PROT_READ | syscall.PROT_WRITE
13 )
14
15 func munmapCodeSegment(code []byte) error {
16 return syscall.Munmap(code)
17 }
18
19
20
21 func mmapCodeSegmentAMD64(size int) ([]byte, error) {
22
23 return mmapCodeSegment(size, mmapProtAMD64)
24 }
25
26
27
28
29
30 func mmapCodeSegmentARM64(size int) ([]byte, error) {
31
32 return mmapCodeSegment(size, mmapProtARM64)
33 }
34
35
36 func MprotectRX(b []byte) (err error) {
37 var _p0 unsafe.Pointer
38 if len(b) > 0 {
39 _p0 = unsafe.Pointer(&b[0])
40 }
41 const prot = syscall.PROT_READ | syscall.PROT_EXEC
42 _, _, e1 := syscall.Syscall(syscall.SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
43 if e1 != 0 {
44 err = syscall.Errno(e1)
45 }
46 return
47 }
48
View as plain text