dlsym サブルーチン
目的
dlopenでロードされたモジュール内のシンボルの位置を検索します。
構文
説明
| 項目 | 説明 |
|---|---|
| 処理 | 前の dlopen 呼び出し、または特殊ハンドル RTLD_DEFAULT、 RTLD_NEXT 、または RTLD_MYSELFのいずれかによって戻された値を指定します。 |
| シンボル | 参照されたモジュールからエクスポートされたシンボルの名前を、以下の形式で指定します。NULL-terminated ストリングまたは特殊シンボル名 RTLD_ENTRY。 |
特殊ハンドル RTLD_DEFAULTの場合、 dlsym は、ロードされた最初のモジュールから始まる名前付きシンボルを検索します。 次に、一致するものが見つかるまで、初期ロード・モジュールおよび dlopen を使用して取得されたグローバル・モジュールのリストを処理します。 この探索は、プロセス内のすべてのモジュールを再配置するために採用されたデフォルト・モデルに従います。
特殊ハンドル RTLD_NEXTの場合、 dlsym は、 dlsym 呼び出しが行われるモジュールの後にロードされたモジュール内で、指定されたシンボルを検索します。
特殊ハンドル RTLD_MYSELFの場合、 dlsym は、 dlsym 呼び出しが行われているモジュールからロードされたモジュール内で、指定されたシンボルを検索します。
特殊シンボル名 RTLD_ENTRYの場合、 dlsym はモジュールのエントリー・ポイントを戻します。 エントリー・ポイント (存在する場合) は、エントリー・ポイントとしてマークされたモジュールのローダー・セクション・シンボルの値です。
RTLD_DEFAULT、 RTLD_NEXT、および RTLD_MYSELFの場合、検索対象のモジュールが dlopen 呼び出しからロードされていると、 dlsym は、呼び出し元が同じ dlopen 依存関係階層の一部であるか、またはモジュールにグローバル検索アクセス権限が与えられている場合に限り、モジュールを検索します。 RTLD_GLOBAL モードの説明については、 dlopen を参照してください。
指定されたシンボルの検索は、モジュールとその従属モジュールの幅優先順序に基づいて行われます。 モジュールが -G または -brtl リンカー・オプションを使用して構成された場合、モジュールの従属モジュールには、 ld コマンド行で指定されたすべてのモジュールが元の順序で組み込まれます。 -G または -brtl リンカー・オプションでリンクされていないモジュールの従属は、指定されていない順序でリストされます。
戻り値
指定されたシンボルが検出されると、そのアドレスが戻されます。 指定されたシンボルが見つからない場合は、次のようになります。NULLが戻され、 errno が 0 に設定されます。 Handle または Symbol が無効な場合は、NULLが戻され、 errno が EINVAL に設定されます。
最初に検出された定義がインポートされたシンボルのエクスポートである場合、この定義は検索を満たします。 インポートされたシンボルのアドレスが戻されます。 最初の定義が据え置きインポートの場合、定義は無視され、検索が続行されます。
指定されたシンボルが、BSSシンボル (初期化されていないデータ構造) の場合、シンボルの初期化されたインスタンスが見つかるか、モジュールとそのすべての従属が検索されるまで、検索が続行されます。 初期化されたインスタンスが見つかった場合は、そのアドレスが返されます。それ以外の場合は、初期化されていない最初のインスタンスのアドレスが返されます。
エラー・コード
| 項目 | 説明 |
|---|---|
| EINVAL | Handle パラメーターが、まだロードされている dlopen によってオープンされたモジュールを参照していない場合、または Symbol パラメーターが無効なアドレスを指している場合は、 dlsym サブルーチンが戻ります。NULLerrno は EINVALに設定されます。 |