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