Я пытаюсь использовать API mprotect на MacOSX 10.4 (тигр), я пробовал все возможные известные мне способы, он всегда возвращает -1 с ошибкой 13, что означает «отказано в доступе», пока я пытаюсь добавить разрешение на запись в некоторый исполняемый код.
Тот же код точно работает на MacOS X 10.5 (leopard).
код довольно простой
int ret = mprotect((void*)pFunc, 4096, PROT_WRITE | PROT_EXEC);
где pFunc — адрес любой функции, загруженной в адресное пространство процесса. Я пытался удалить PROT_EXEC перед добавлением права доступа PROT_WRITE, но безуспешно. Я также попытался выровнять pFunc с размером страницы памяти, но тоже не повезло.
Любая идея, как заставить это работать?