2

iOSで共有メモリのブロックを構築しようとしています。コンパイルしてリンクしますがshmget()、最も無害なパラメーターにSIGSYSシグナルをスローします。

NSString *p = [[NSBundle mainBundle] pathForResource:@"crash" ofType: nil];
key_t tok = ftok([p UTF8String], 918273);
int mid = shmget(tok, 4096, IPC_CREAT|S_IRUSR|S_IWUSR);

tokは大きな正の整数であり、-1ではありません。サイズ-1024を試しましたが、同じ効果です。

SysV共有メモリはiOSでもサポートされていますか?ヘッダーとライブラリが存在するか、コンパイラ/リンカが文句を言います。同じコードがシミュレーターで機能します。私は何が間違っているのですか?

私の興味はこの質問から生じています。

4

2 に答える 2

2

shm_open()/mmap()コンボは、明示的な権限の変更なしに、シミュレーターとデバイス(iOS 4でテスト済み)の両方で、アドバタイズされたとおりに機能します。

注:shm_open()奇妙なことに可変個引数として文書化されています。S_IRUSR実際には、アクセスマスクを使用して3番目のパラメーター( -likeフラグの組み合わせ、または8進chmod数値)を指定する必要があります。

編集:iOS 7で壊れたようです。O_CREATフラグが指定されていても、shm_openはerrno = 2(ENOENT)で-1を返します。

于 2012-07-26T14:42:04.417 に答える
1

iOSでは、共有メモリをまったく使用できません。正確な詳細はわかりませんが、a)セキュリティのため、b)サンドボックス環境の一部であることは知っています。

だから私は自分自身と脱獄シーンでの私の存在から上記を知っていますが、ここにサンドボックスとそれらが共有メモリにどのように影響するかを説明するいくつかのリンクがあります

http://www.trailofbits.com/resources/ios4_security_evaluation_paper.pdf

http://lists.apple.com/archives/cocoa-dev/2012/Apr/msg00535.html

于 2012-07-21T03:26:49.863 に答える