Linuxオペレーティングシステム環境では、実行するアプリケーション/プログラムに関連付けられているバイナリ実行可能ファイルは、実行時にロードされる共有ライブラリに直接リンクされます。
好奇心旺盛で進化しているLinuxユーザーとして、通常のプログラムの起動時に実行しているバイナリ実行可能ファイルに関連/リンクされているこれらの共有ライブラリについてのアイデアを知りたくなるでしょう。
この記事では、Linuxの実行可能ファイルで使用されるすべての共有ライブラリを見つけるためのいくつかのアプローチについて説明します。
Linuxライブラリの概要
プログラマーまたはプログラミングの世界に精通しているユーザーは、ライブラリを、組織化された方法/形式でまとめられたコンパイル済みのコードピース/セグメントとして定義します。ライブラリのコンパイル済みの性質/属性により、さまざまなプログラム間で柔軟かつ簡単に再利用できます。
Linuxオペレーティングシステムアーキテクチャでは、ライブラリを静的のいずれかに分類できます。 (静的ライブラリ )または共有 (共有ライブラリ 。
静的ライブラリは特定のプログラムに静的にバインドされており、プログラムのコンパイル時にのみアクセスできます。共有ライブラリは、プログラムが起動されるとアクティブになり、プログラムの実行時にメモリに常駐します。
Linuxでプログラムの共有ライブラリを見つける方法
ターゲットプログラムに関連付けられている共有ライブラリを決定する前に、まず、プログラムに関連付けられている実行可能ファイルがどこにあるかを知る必要があります。 Linuxでは、プログラムの実行可能ファイルの場所は通常、 / usr / bin内です。 ディレクトリ。
$ ls -l /usr/bin
右端の列には、プログラムの実行可能ファイルの名前がリストされています。
lddコマンドを使用してLinuxプログラムの共有ライブラリを検索する
ldd コマンドは、プログラムの共有ライブラリを指す簡単なシェルスクリプトとして存在します。上記のスクリーンキャプチャのように、たとえば、anydeskアプリケーションに関連付けられた共有ライブラリを出力してみましょう。
次のコマンドを使用して、Anydeskの実行可能ファイルの場所を特定できます:
$ whereis anydesk
lddを介して共有ライブラリを決定する コマンド、実行します:
$ ldd /usr/bin/anydesk
ご覧のとおり、 anydeskに関連付けられている多数のライブラリのリストがあります。 応用。 lddに注意してください コマンドは、クエリされたプログラムを実行して共有ライブラリ情報を取得する傾向があります。したがって、コマンドを信頼できる実行可能ファイルにのみ関連付けます。
objdumpおよびgrepコマンドを使用してプログラム共有ライブラリを検索する
objdump GNU Binutilsの一部であるコマンド パッケージはオブジェクトファイル情報の表示に焦点を合わせますが、 grep コマンドは、プログラムに関連付けられた共有ライブラリを一覧表示します。
これらのコマンドがwhoisのようなプログラムで何をもたらすか見てみましょう ドメイン名情報に使用されます。
$ whereis whois
次に、プログラムの共有ライブラリを見つけます。
$ objdump -p /usr/bin/whois | grep 'NEEDED'
ご覧のとおり、 whois ドメインルックアッププログラムの実行可能ファイルは、2つの共有ライブラリに関連付けられています。
または、 readelfを使用することもできます zipプログラムの実行可能ファイルの共有情報を取得するコマンド。
$ whereis zip $ readelf --dynamic /usr/bin/zip | grep NEEDED
出力に従って、 zip プログラム実行可能ファイルは、2つの共有ライブラリに関連付けられています。
Awkコマンドを使用して共有ライブラリを検索する
このオプションは、すでに実行されているプログラムに最適です。まず、 PIDを取得する必要があります (プロセスID )。たとえば、フレームショットがあるとします。 スクリーンキャプチャユーティリティが実行されています。
PIDを取得するには 、実行します:
$ pgrep flameshot 45261
/ proc /
$ awk '$NF!~/\.so/{next} {$0=$NF} !a[$0]++' /proc/45261/maps
Linuxのプログラム実行可能ファイルに関連付けられているすべての共有ライブラリの一覧表示に精通しています。