私はAndroidのメモリの特定の領域の保護を変更するためにmprotect()を使用しようとしています。ただし、何をしてもリージョンを書き込み可能にすることはできません(何をしても、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を使用してmprotectsyscallを直接呼び出してみましたが、役に立ちませんでした。PROT_READ|PROT_WRITEも試しました。
私はiOSで同様のことをしましたが、これは絶対にうまく機能します...