Допустим, я выделил несколько страниц непрерывной памяти, используя VirtualAlloc()
от 0x06000000
до 0x06010000
(это 16 страниц по 4 КБ) с защитой PAGE_READWRITE
. Но через некоторое время я хочу сделать одну страницу в этой области памяти исполняемой. После прочтения документации msdn для VirtualProtect()
я запутался, возможно ли это или нет. В Linux это с mprotect
.
Визуальный пример того, что я пытаюсь сделать:
+-------------------------------------------------------+
| Commited memory with a single VirtualAlloc call (RW-) |
+-------------------------------------------------------+
↑ ↑
0x06000000 0x06010000
И я хочу изменить защиту на это (не в масштабе):
+------------------+-----------+------------------------+
| (RW-) | (RWX) | (RW-) |
+------------------+-----------+------------------------+
↑ ↑ ↑ ↑
0x06000000 0x06003000 0x06004000 0x06010000
Разрешите ли мне это сделать с помощью VirtualProtect()
звонка, подобного этому?
VirtualProtect(0x06003000, 0x1000, PAGE_EXECUTE_READWRITE, &oldProtection);
В настоящее время у меня нет доступа к системе Windows, чтобы проверить это, поэтому я спрашиваю об этом на SO