diff --git a/internal/static/duplicate_darwin_arm64.go b/internal/static/duplicate_darwin_arm64.go index dc7192e..c685965 100644 --- a/internal/static/duplicate_darwin_arm64.go +++ b/internal/static/duplicate_darwin_arm64.go @@ -244,14 +244,16 @@ func patchRodataCodePtrs(offset uintptr, moddata *moduledata) error { } } - _, err = mach.VmRemap(mapStart, uintptr(tmpPtr), size) + err = unix.Mprotect(tmpSlice, unix.PROT_READ|unix.PROT_EXEC) if err != nil { unix.MunmapPtr(tmpPtr, size) - return fmt.Errorf("vm_remap rodata (%d bytes at %#x): %w", size, mapStart, err) + return fmt.Errorf("mprotect temp to r-x: %w", err) } - if err := unix.Mprotect(unsafe.Slice((*byte)(unsafe.Pointer(mapStart)), int(size)), unix.PROT_READ); err != nil { - return fmt.Errorf("mprotect rodata to r: %w", err) + _, err = mach.VmRemap(mapStart, uintptr(tmpPtr), size) + if err != nil { + unix.MunmapPtr(tmpPtr, size) + return fmt.Errorf("vm_remap rodata (%d bytes at %#x): %w", size, mapStart, err) } unix.MunmapPtr(tmpPtr, size)