2

Monotouchを使用してiPhoneアプリケーションを作成していますが、最近アプリがクラッシュし始めました。

Mprotect failed at 0x863a000 (length 8192) with errno 12

続いて、かなり長いスタックトレースと、「アプリケーションがシグナル6で異常終了した」ことを通知するSpringboardが続きます。

私は、アプリがiPhoneで利用可能なすべてのメモリを使い果たしたと述べているこの質問を読みました。いくつかの一般的な廃棄パターンをアプリに適用し、通常、重いオブジェクトはできるだけ早く廃棄しました。これは、アプリがより少ないメモリを使用して実行されることを意味します。ただし、MProtectに失敗したというメッセージが表示されます。

また、機器の下でアプリを実行しているときに、機器がデバイスで使用できる空きメモリが十分にあることを報告していることにも注意してください(約40MB)。

私はそれを正しく理解していないと思うので、誰かがMProtectとこの失敗を説明できるかどうか疑問に思いました。

4

2 に答える 2

1

mprotect(2)オペレーティングシステムカーネルに、アドレス空間の一部の保護モードを変更するように要求します。

mprotect(2)多くの場合、アドレススペースのデータセクションを実行不能にするために使用されます。これにより、バッファオーバーフロー文字列の脆弱性のフォーマット、未割り当てメモリエラーの解放後の使用、または同様の攻撃が攻撃者から提供されたデータに戻ることができなくなります。また、これらの同じ脆弱性によってプログラムスペースが変更されないようにするために使用されます。(攻撃者が提供した機能を単純に上書きできる場合、それは良くありません。)mprotect(2)text

しかし、mprotect(2)それは魔法ではありません。libc攻撃への復帰system(3)、または他のコードインタープリターの不適切な使用などを防ぐことはできません。

iPhoneのerrno値のC記号は何ですか?12モノタッチはどこで、なぜmprotect(2)それ自体を使用するのですか?ソフトウェアが使用する可能性はありますmprotect(2)か?

于 2011-03-22T10:55:37.463 に答える
1

アプリはジェネリックを使用していますか?

ジェネリックスの型に仮想メソッドがあることに注意してください。モノタッチの場合、プリジッティング中に多くのハックを実行し、トランポリンでさらに魔法をかける必要があります。私の経験では、YMMVでメソッドのハイジャックやメモリの破損が発生する可能性があります。

安全のために、ジェネリッククラスではすべてのメソッドを非仮想化します。

于 2011-03-24T01:45:42.987 に答える