3

私は MacOSX 10.4 (tiger) で mprotect API を使用しようとしています。私が知っているすべての方法を試してみましたが、書き込み許可を追加しようとしているときに「許可が拒否されました」を意味する errno 13 で常に -1 が返されます。いくつかの実行可能コード。

同じコードが MacOS X 10.5 (ヒョウ) でも正確に機能します。

コードはかなり単純です

int ret = mprotect((void*)pFunc, 4096, PROT_WRITE | PROT_EXEC);

ここで、pFunc は、プロセスのアドレス空間にロードされた関数のアドレスです。PROT_WRITE アクセス権を追加する前に PROT_EXEC を削除しようとしましたが、うまくいきませんでした。また、pFuncをメモリページサイズに合わせてみましたが、運もありません..

これを機能させる方法はありますか?

4

4 に答える 4

1

変更しようとしているメモリは、実行可能ファイルから mmap されていますか? mprotect (Linux の場合) のマニュアル ページは、これがメモリ ロケーションの変更 (PROT_WRITE) を妨げることを示しているようです。

于 2009-03-04T19:16:26.743 に答える
0

ここに別のアイデアがあります。WRITE なしで EXEC とマークしてみてください。write+exec を拒否することは、セキュリティ機能である可能性があると思います。

それに書き込むには、EXEC ではなく WRITE としてマークします。

于 2009-05-08T00:24:39.353 に答える
0

私はOSXについて何も知りません。そうは言っても、Mach 関数vm_protectを使用できますか?

于 2009-02-27T08:47:05.333 に答える
0

実行可能領域に書き込む権限がありません。とにかく、なぜあなたはすべきですか?

これは一部のプラットフォームでは機能すると確信していますが、すべてではありません。あなたは何をしようとしているのですか?

于 2009-02-28T14:40:59.607 に答える