From: "Jonathan Worthington" <[EMAIL PROTECTED]>

> Here is my attempt at a patch for executable memory allocation, which
makes

+void *
+mem_alloc_executable(size_t size)
+{
+ void *ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

^^^^^^^^^^^^^^^
                                                 MEM_RESERVE | MEM_COMMIT

or more preferrable  MEM_RESERVE | MEM_TOP_DOWN | MEM_COMMIT


+ if (memInfo.RegionSize <= size)
+ {
+  CopyMemory(newBlock, memblock, memInfo.RegionSize);
+ }
+ else
+ {
+  CopyMemory(newBlock, memblock, size);
+ }

memInfo.RegionSize is always either greater or equal size. So just

CopyMemory(newBlock, memblock, size);

would be enough

+void
+mem_free_executable(void *addr)
+{
+ /* We need to decommit, then release the pages. */
+ VirtualFree(addr, 1, MEM_DECOMMIT); <<<<<<<<<<<<< No need
+ VirtualFree(addr, 0, MEM_RELEASE);
+}

There is no need to decommit pages if next you release the region.

0x4C56


Reply via email to