musl libc ldso 動的ローディングの研究ノート: 01

序文

  • musl は、システム コールの上に構築された軽量の標準 C ライブラリであり、glibc または uClibc と同じカテゴリに属する​​ [ユーザー モード] C ライブラリと考えることができます。

  • musl ベースの gcc ツールチェーンには、Linux またはその他のオペレーティング システムのコンパイルに使用できるクロスコンパイル ツールチェーンが含まれています。たとえば、現在の Lite-OS および RT-Smart は、コンパイル ツールチェーンとして musl gcc を使用し、コンパイル ツールチェーンとして musl libc を使用します。ユーザーモードアプリケーションのCライブラリ。

  • musl は MIT 認可に基づいており、オープンソース、軽量、無料であり、ますます多くのオペレーティング システムが musl を標準 C ライブラリとして採用し始めていると推定されています。

  • 最近、動的ローディング機能である musl libc の ldso について研究していますが、musl の動的ローディング機能は musl libc.so に統合されています。

エルフ形式のファイル

  • musl 自体は動的ロード関数 ldso を統合しており、コードを予備的に確認したところ、elf 形式で動的にコンパイルされたアプリケーションのロードをサポートしていることがわかりました。

  • musl gcc ツールチェーン (クロスコンパイル ツールチェーン) を使用してコンパイルされたアプリケーションの場合、readelf -l xxx.elfelf ファイルにダイナミック リンク情報があるかどうかを確認できます。含まれている場合は、musl ldso を使用して依存共有ライブラリをロードする必要があります

  • 例: 動的にリンクされたアプリケーションの存在を確認する [インタープリターセグメント] 情報:INTERPタイプ

コマンド:aarch64-linux-musleabi-readelf.exe -l glib_gio_test_s.elfまたはreadelf.exe -l glib_gio_test_s.elf

INTERP情報が細分化されていることが分かり、[Requesting program interpreter: /lib/ld-musl-aarch64.so.1]

ここに画像の説明を挿入

elf ファイルが依存する共有ライブラリを表示する

  • 静的にコンパイルされた elf ファイルにはダイナミック リンク情報がなく、共有ライブラリに依存しませんが、動的にコンパイルされリンクされた elf ファイルにはダイナミック リンク情報があります。依存する共有ライブラリはaarch64-linux-musleabi-readelf.exe -d glib_gio_test_s.elfまたはreadelf.exe -d glib_gio_test_s.elf

ここに画像の説明を挿入

エルフの頭部情報を確認する

  • aarch64-linux-musleabi-readelf.exe -h glib_gio_test_s.elfまたはを使用して、readelf.exe -h glib_gio_test_s.elfエントリ関数のアドレスの取得など、アプリケーション elf のヘッダー情報を表示します。

ここに画像の説明を挿入

エルフのシンボル情報を表示する

  • いわゆるエルフ シンボルは、変数名、関数名、配列などであり、これらはreadelf依然として

aarch64-linux-musleabi-readelf.exe -s glib_gio_test_s.elfまたはreadelf.exe -s glib_gio_test_s.elf、一部のアプリケーションでは elf ファイルに多くのシンボルが含まれるため、それをテキスト ファイルに出力し、ファイル表示ツールを使用して表示できることに注意してください。

aarch64-linux-musleabi-readelf.exe -s glib_gio_test_s.elf > sym_01.s、ここではシンボルをsym_01.sファイルにエクスポートし、テキスト ビューアを使用して開いて表示します。

ここに画像の説明を挿入

エルフ表示ツール

  • 上記は を通じて elf ファイルを表示することですreadelfが、elf ファイルを表示する他のツールはありますか?

  • 推奨される使用法:EmEditorバイナリ ファイルを表示、検索、編集できるバイナリ表示ツール。elf ファイルは実際にはバイナリ ファイルです。

ここに画像の説明を挿入

  • elf ファイルを分析して表示するには、有名な Detect It Easy ツールである Die を使用することをお勧めします。elf ファイルは、バイナリで表示したり、逆アセンブルしたり、各セグメント、セクションなどで表示したりできます。

  • dieでelfファイルを開く

ここに画像の説明を挿入

  • die を使用して elf ファイル情報を表示します: elf header
    ここに画像の説明を挿入

まとめ

  • この記事は主に elf ファイルの表示を記録しており、動的にロードされるファイルについて予備的な理解を持っています。つまり、動的ロードを学習する前に、elf 形式のファイル、ファイル構成、ファイル ヘッダー、ファイル プログラム ヘッダーについてよく理解しておく必要があります。 、ファイルの各セクション、ファイル セクション、elf ファイルのどのコンテンツを動的にロードする必要があるか

  • 現時点では、elf ファイルには 1 つのヘッダーと 1 つ以上のプログラム ヘッダーがあることを理解しています。プログラム ヘッダーのサイズは固定、つまり構造です。内部のコンテンツは情報のセグメントを記述します。elf ファイルにはいくつありますか?プログラムヘッダー? これは、elf ファイルのヘッダーを解析して取得する必要があります: elf Header

  • elf の標準仕様を確認し、elf の構成と荷重メカニズムについて理解しておくことをお勧めします。これはその後の動的荷重の研究にとって非常に重要です。

おすすめ

転載: blog.csdn.net/tcjy1000/article/details/132370600