23

2 つの実行可能ファイルがあり、どちらもクロス コンパイルして Android で実行します。デバイスの同じディレクトリに両方を配置しました。ld-linux.so.3 を含め、それらが依存するすべての共有ライブラリを同じディレクトリに配置しました。次を使用して実行可能ファイルを実行します。

ld-linux.so.3 --library-path /path/to/libraries 実行可能ファイル名

任意のユーザーとして実行している場合、どちらも古いバージョンの Android で動作します。ルートとして実行している場合、どちらも Android の最新バージョンで動作します。任意のユーザーとして実行している場合、Android の最新バージョンで動作するのは 1 つだけです。代わりに、次のようになります。

共有オブジェクトからセグメントをマップできませんでした: executable_name 操作は許可されていません

実行されない実行可能ファイルとの違いを見つけるにはどうすればよいですか?

私はオンラインで多くのことを読み、ほとんどの人がこのエラーを受け取ります。

A)依存しているライブラリの1つまたは実行可能ファイル自体に対する実行権限がありません。

また

B) NOEXEC としてマウントされているディレクトリから実行しようとしています。

これらはどちらもそうではないようです。すべてのライブラリを見つけることができ、任意のライブラリを単独でロードして、解決に依存している他のものを確認できます。また、対象のディレクトリから基本的なスクリプトを実行できます。

Android の新しいバージョンである Jelly Bean は別の Linux カーネル バージョンであり、それが関連しているのではないかと思います。

何を与える?どうすればデバッグできますか?

4

4 に答える 4

3

問題は、実行可能ファイルのコンパイル方法にありました。これらは、新しいアーム デバイスを適切にサポートするクロス コンパイラでコンパイルする必要がありました。私が使用したコンパイラは、ARM デバイスのサブセットでのみ動作する実行可能ファイルを生成しました。この問題は、さまざまなバージョンの Android にはありませんでした。

于 2014-08-21T18:44:46.947 に答える
0

SELinux は Android 4.3 でデフォルトで有効になっていますが、「寛大」であることが想定されています [0]。電話ベンダーがより制限的なルールを追加した可能性があります。

[0] https://source.android.com/devices/tech/security/se-linux.html

于 2013-08-20T07:43:39.263 に答える