28 #if HAVE_MMAP && HAVE_MPROTECT
29 # define _DEFAULT_SOURCE
30 # define _SVID_SOURCE // needed for MAP_ANONYMOUS
31 # define _DARWIN_C_SOURCE // needed for MAP_ANON
32 # include <sys/mman.h>
33 # if defined(MAP_ANON) && !defined(MAP_ANONYMOUS)
34 # define MAP_ANONYMOUS MAP_ANON
38 #if HAVE_MMAP && HAVE_MPROTECT && defined(MAP_ANONYMOUS)
42 void *ptr = mmap(
NULL,
size, PROT_READ | PROT_WRITE,
43 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
44 if (ptr == MAP_FAILED)
51 if (mprotect(ptr,
size, PROT_READ | PROT_EXEC) == -1)
62 #elif HAVE_VIRTUALALLOC
68 return VirtualAlloc(
NULL,
size, MEM_COMMIT, PAGE_READWRITE);
74 if (!VirtualProtect(ptr,
size, PAGE_EXECUTE_READ, &old_protect))
82 VirtualFree(ptr, 0, MEM_RELEASE);