Предположим, что я выделил несколько страниц непрерывной памяти, используя VirtualAlloc()
от 0x06000000
до 0x06010000
(это 16 страниц 4 КБ) с защитой PAGE_READWRITE
. Но через некоторое время я хочу сделать одну страницу в этом регионе памяти исполняемым. После прочтения документации msdn для VirtualProtect()
, я смущен, если это возможно или нет. В Linux это mprotect
.Защита отдельных страниц в памяти, выделенных VirtualAlloc
Визуальный пример того, что я пытаюсь сделать:
+-------------------------------------------------------+
| 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
Так что 'VirtualProtect()' не возражал бы, если бы я менял защиту определенной страницы, а не весь диапазон «VirtualAlloc()», выделенный? –
Нет, все в порядке. Я делаю это [здесь] (http://stackoverflow.com/a/7859813/968261). –
Хорошо, тогда :) –