diff --git a/src/Ultra.Sampler/MacOS/MacOSLibSystem.cs b/src/Ultra.Sampler/MacOS/MacOSLibSystem.cs index 40ed80b..b2fc3e4 100644 --- a/src/Ultra.Sampler/MacOS/MacOSLibSystem.cs +++ b/src/Ultra.Sampler/MacOS/MacOSLibSystem.cs @@ -22,6 +22,8 @@ internal static partial class MacOSLibSystem public const int KERN_INVALID_ADDRESS = 1; public const int PROT_READ = 0x01; + public const int PROT_WRITE = 0x02; + public const int PROT_EXEC = 0x04; public const int PT_ATTACH = 10; // TODO: deprecated public const int PT_DETACH = 11; diff --git a/src/Ultra.Sampler/MacOS/MacOSUltraSampler.cs b/src/Ultra.Sampler/MacOS/MacOSUltraSampler.cs index 1f1d96c..f210b66 100644 --- a/src/Ultra.Sampler/MacOS/MacOSUltraSampler.cs +++ b/src/Ultra.Sampler/MacOS/MacOSUltraSampler.cs @@ -236,7 +236,7 @@ private static ulong GetDyldCodeSize(nint headerPtr) if (command.cmd == MacOSLibSystem.LC_SEGMENT_64) { ref var segment = ref Unsafe.As(ref command); - if (segment.vmaddr < startAddress) + if ((segment.initprot & MacOSLibSystem.PROT_EXEC) != 0 && segment.vmaddr < startAddress) { startAddress = segment.vmaddr; } @@ -253,7 +253,7 @@ private static ulong GetDyldCodeSize(nint headerPtr) ref var segment = ref Unsafe.As(ref command); var newSize = (ulong)((long)segment.vmaddr + (long)segment.vmsize - (long)startAddress); - if (newSize > size) + if ((segment.initprot & MacOSLibSystem.PROT_EXEC) != 0 && newSize > size) { size = newSize; }