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