Android mprotect()不会改变保护措施

时间:2012-03-05 10:26:32

标签: android c android-ndk mprotect

我一直在尝试使用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上做过类似的事情,但绝对正常......

0 个答案:

没有答案