我一直在尝试使用 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 上做过类似的事情,效果非常好......