リンカーとライブラリ

制御プロセスとターゲットプロセス間の対話

ターゲットプロセスを検査して操作できるようにするために、rtld-デバッガインタフェースは、エクスポートされたインタフェース、インポートされたインタフェース、およびエージェントを使用して、これらのインタフェース間で通信を行います。

制御プロセスは、librtld_db.so.1 によって提供される rtld-デバッガインタフェースにリンクされて、このライブラリからエクスポートされたインタフェースを要求します。このインタフェースは、/usr/include/rtld_db.h に定義されています。次に、librtld_db.so.1 は制御プロセスからインポートされたインタフェースを要求します。この対話によって、rtld-デバッガ インタフェースは、次のことを行うことができます。

インポートされたインタフェースは多数の proc_service ルーチンから構成されています (「デバッガインポートインタフェース」を参照) 。ほとんどのデバッガは、このルーチンをすでに使用してプロセスを解析しています。

rtld-デバッガインタフェースは、rtld-デバッガインタフェースの要求により解析中のプロセスが停止することを前提としています。停止しない場合は、ターゲットプロセスの実行時リンカー内にあるデータ構造が、検査時に一貫した状態にない可能性があります。

図 6-1 は、librtld_db.so.1、制御プロセス (デバッガ)、およびターゲットプロセス (動的実行可能プログラム) 間の情報の流れを示しています。

図 6-1 rtld-デバッガの情報の流れ

Graphic


注 -

rtld-デバッガインタフェースは、実験的と見なされる proc_service インタフェース (/usr/include/proc_service.h) に依存します。rtld-デバッガインタフェースは、展開時に、proc_service インタフェース内の変更を追跡しなければならないことがあります。


rtld-デバッガインタフェースを使用する制御プロセスのサンプル実装状態は、/usr/demo/librtld_dbSUNWosdem パッケージに用意されています。 このデバッガ rdb は、proc_service インポートインタフェースの使用例を提示して、すべての librtld_db.so.1 インポートインタフェースの使用例を提示して、すべての rtld-デバッガインタフェースについて説明します。さらに詳しい情報は、サンプルデバッガをテストして得ることができます。