Я пытался использовать mprotect () для изменения защиты определенной области памяти на Android.
Тем не менее, что бы я ни делал, я не могу сделать регион доступным для записи (что бы я ни делал, он все еще остается PROT_READ | PROT_EXEC. Может быть, я чего-то не понимаю в защите памяти Android? регионы памяти? Если да, то есть ли системная опция, чтобы отключить это?
Код выглядит примерно так:
int sub() { return 0; }
void main()
{
int pagesize = sysconf(_SC_PAGESIZE); /* 0x1000 */
mprotect( (void *)((int)sub - ((int)sub % pagesize), pagesize, PROT_WRITE);
*((unsigned char *)sub) = 0; /* fails here */
}
Я пытался использовать mmap и вызывать системный вызов mprotect напрямую, но безрезультатно. Я также пробовал PROT_READ | PROT_WRITE.
Я сделал аналогичную вещь на iOS, которая работает абсолютно нормально ...