ネイティブ Android ライブラリのコードがプロセスのアドレス空間で占めるアドレス範囲を見つけようとしています。私は読んで解析しています/proc/self/maps
。ライブラリには 2 つのセクションがあります。1 つはコードで、もう 1 つはデータだと思います。私はそれらを区別する必要があります。ただし、それらの違いは、まあ、状況によるものです。Android 2.3.3 でのテスト。
コード セクションのパーミッションは r-xp、データのパーミッションは rwxp で、どちらも実行可能です。書き込み可能性に基づいて決定するのは不安です.Androidの同じフレーバーで、読み取り専用のデータセクションがある場合はどうなりますか?
もう 1 つの違いは、マップされたセクションのファイルに対する相対的なオフセットです。コード セクションのオフセットは 0 です。ここでも、リンカの一部の反復でコードの前にデータが配置される場合はどうなるでしょうか。
GDB や Android のスタック ウォーカーなどのツールは、コード アドレスがどのモジュールに属しているか、ライブラリ内のオフセットは何かを問題なく教えてくれます。言ってるだけ'。
編集: Android 4.0 では、セクションが異なります: r-xp、r--p、rw-p があります。これにより、実行可能セクションの失敗を簡単に特定できますが、以前の Android ではどうでしたか?