2009-02-27 10 views
3

MacOSX 10.4(tiger)でmprotect APIを使用しようとしていますが、可能な限りすべて試してみました。常に-1を返します。errno 13は "permission denied"実行可能なコードに書き込み権限を追加しようとしています。mprotect API on OS X Tiger

同じコードはMacOS X 10.5(ヒョウ)で動作します。 PFUNCは、プロセスのアドレス空間にロードされた任意の関数のアドレスです

コードが

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

非常に単純です。私はPROT_WRITEアクセス権を追加する前にPROT_EXECを削除しようとしましたが、運はありません。私はまた、pFuncをメモリページのサイズと合わせることを試みましたが、運も駄目ではありません。

どのようにすればよいでしょうか?

+0

+1、私は同じ正確な問題を抱え、最終的には私のサポートリストからOSXを落としました。 –

+0

問題を引き起こす完全なプログラムを表示します。 – stepancheg

答えて

0

私はOSXについて何も知らない。つまり、Mach関数vm_protectを使用できますか?

+0

新しい保護が既存の最大保護を超えて最大保護を増加させたため、vm_protectはKERN_PROTECTION_FAILUREを返しています。私はどのように "デフォルト"最大限の保護を変更するか分からない? –

+0

vmmapを実行することによって、pFuncを含む仮想メモリページにr-x最大アクセス許可があることがわかります。他の実行可能仮想メモリページにはrwxアクセス許可があります。事前に感謝します –

0

実行可能領域に書き込む権限がありません。とにかく、どうしてですか?

これは一部のプラットフォームでは動作するが、すべてではないことは確かです。あなたは何をしようとしているのですか?

+0

私はヒョウの実行可能領域に書き込む許可を持っています(これはより安全です、など..)。私はWindows上でMicrosoftの迂回路がやっていることに似た何かをしようとしています。 –

1

mmapを実行ファイルから変更しようとしているメモリはありますか? mprotectのmanページ(Linux上)は、これによりメモリーの場所を変更(PROT_WRITE)できないことを示しているようです。

0

これは別の考えです。 WRITEなしでEXECをマークしてみてください。私はwrite + execを否定することはセキュリティ機能かもしれないと思う。

書き込むには、WRITEとしてマークしますが、EXECではマークしないでください。