dbx コマンドによるデバッグ

概要

動的リンカーは“rtld”、“実行時 ld”、または“ld.so”とも呼ばれ、実行中のアプリケーションに共有オブジェクト (ロードオブジェクト) を組み込むように準備します。rtld が稼働状態になるのは主に次の 2 つの場合です。

  1. プログラムの起動時

    プログラムの起動時、rtld はまずリンク時に指定されたすべての共有オブジェクトを動的に読み込みます (ldd (1) を使用すれば、プログラムによって読み込まれる共有オブジェクトを調べることができます)。これらは「あらかじめ読み込まれた」共有オブジェクトで、一般に libc.so、libC.so、libX.so などがあります。

  2. アプリケーションから呼び出しがあった場合

    アプリケーションでは、関数呼び出し dlopen(3) と dlclose(3) を使用して共有オブジェクトやプレーンな実行可能ファイルの読み込みや読み込みの取り消しを行います。共有オブジェクト (.so) や通常の実行可能ファイル (a.out) のことを、dbx では「ロードオブジェクト」といいます。

動的リンカーは、読み込まれたすべてのオブジェクトのリストを「リンクマップ」というリストに保持します。リンクマップはユーザメモリに管理され、スレッドデバッグ用の特別なシステムライブラリ libthread_db.so によって間接的にアクセスされます。

dbx はリンクマップから次のことを調べます。

これらのデータ構造が壊れていると、dbx は正しい動作をしないことがあります。