Android mprotect () не меняет защиты - PullRequest
1 голос
/ 05 марта 2012

Я пытался использовать 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, которая работает абсолютно нормально ...

...