stripnm コマンド

目的

指定されたオブジェクト・ファイルのシンボル情報を表示します。

構文

stripnm [ -x | -d ] [ -s ] [ -z ] File

説明

stripnm コマンド (-s フラグなしで実行した場合) は、指定されたオブジェクト・ファイルのシンボル・テーブルを標準出力へ表示します。 File パラメーターで指定するファイルは、1 つのオブジェクト・ファイル、またはオブジェクト・ファイルのアーカイブ・ライブラリーのいずれでも構いません。 File パラメーターで指定したファイルがアーカイブの場合は、アーカイブ内の各オブジェクト・ファイルのリストが生成されます。 シンボル・テーブルがオブジェクト・ファイルから取り除かれている場合 は、stripnm コマンドがトレースバック・テー ブル (-s フラグを指定していなくても) とオブジェクト・ ファイルのローダー・セクションからシンボル名を取り出します。 トレースバック・テーブルが存在しない場合には、エラー・メッセージが表示されます。

シンボル名の前には、シンボル名のアドレスとシンボル・タイプを示す文字 (nm 出力 に類似) が 1 つ付きます。-z を使用する と AIX® 5.2 以前と同じ出力フォーマットになります。 つまり、シンボル名の後に、シンボル名のアドレス (アドレスが未定義の場合はブランク)、 クラス・タイプ、およびセクション・タイプが続きます。 アドレス・フィールド は、10 進数 (デフォルト値に -z を使用、 または -d を使用した場合) または 16 進数 (デフォルト 値に -z を使用しないか、または -x フラグ を使用した場合) で表示できます。

ソース・ファイル名についても stripnm コマンドが収集および 報告をします。ソース・ファイル名の行に続くすべてのシンボルは、次のソース・ファイル 名行になるまで、そのソース・ファイルに属します。strip されたファイルについては、 ソース・ファイル名がオブジェクト・ファイル名として報告されます。

stripnm コマンドに -s フラグ を付けて実行すると、シンボル・テーブルがあっても無視して、常にトレースバック・テーブル とオブジェクト・ファイルのローダー・セクションからルーチン名を取り出します。

シンボル・テーブルがない場合、または -s フラグを 使用した場合は、stripnm コマンドはグルー・コ ードとポインター・グルー情報も検索します。いずれもオブジェクト・ファイルの テキスト・セクションにある命令シーケンスです。

32 ビット・アプリケーションのデータ・コードは、次の命令シーケンスで構成されています。
8182xxxx #   lwz r12,xxxx(r12) (xxxx is the TOC entry index)
90410014 #   stw r2,14(r1)
800c0000 #   lwz r0,0(r12)
804c0004 #   lwz r2,4(r12)
7c0903a6 # mtctr r0
4e800420 # bctr

ローダー・セクション・エントリーのアドレスが xxxx で示され る TOC エントリーに一致する場合は、このデータ・コード・シーケンスについて 関数名を提供します。

64 ビットの実行プログラムのデータ・コード・シーケンスは次のとおりです。
982xxxx #    ld r12,xxxx(r2) (xxxx is the TOC entry index)
8410028 #   std r2,28(r1)
80c0000 #    ld r0,0(r12)
84c0008 #    ld r2,8(r12
c0903a6 # mtctr r0
e800420 #  bctr

32 ビット・アプリケーションのポインター・データ・コードは、次 のシーケンスで構成されています。
800b0000 #   lwz r0,0(r11)
90410014 #   stw r2,20(r1)
7c0903a6 # mtctr r0
804b0004 #   lwz r2,4(r11)
816b0008 #   lwz r11,8(r11)
4e80xx20 #  bctr
64 ビットの実行プログラムについては、ポインター・データ・コードの シーケンスは次のとおりです。
e80b0000 #    ld r0,0(r11)
f8410028 #   std r2,20(r1)
7c0903a6 # mtctr r0
e84b0008 #    ld r2,8(r11)
e96b0010 #    ld r11,16(r11)
4e80xx20 #  bctr

ポインター・データは 1 つのコピーだけに存在し、常に ._prtgl の シンボルで報告されます。

stripnm コマンドは、これらのシーケンスについて、Text セクションの最初から最後まで検 索します。コマンドは一致する命令シーケンスを捜し出すと、これをデータ・ コードまたはポインター・データとして報告します。

ソース・ファイル・シンボルは、データ・コードとポインター・コードの両者に ついて、stripnm が人工的に生成します。 32 ビットの 実行プログラムのソース・ファイルは、すべてのデータ・コード・エントリー が glink.s、ポインター・データは ptrgl.s で す。64 ビットの実行プログラムのソース・ファイルは、 それぞれ glink64.sptrgl_64.s です。

stripnm コマンドを、/unix ファイルのシンボル情報を検索するために使用することもできます。 /unix ファイルが現在実行中のカーネルに対応しない場合は、警告メッセージが表示されます。

フラグ

項目 説明
-d シンボルのアドレス値を 10 進フォーマットで表示します。

これが -z が付いたときのデフォルトです。

-s シンボル・テーブルを無視するように強制します。
-x シンボルのアドレス値を 16 進フォーマットで表示します。

これが -z が付いていないときのデフォルトです。

-z 古いフォーマットを使用します。

  1. a.out オブジェクト・ファイルのシンボルをリストするには、以下のように入力します。
    stripnm a.out
  2. a.out オブジェクト・ファイルの シンボル・アドレス値を 10 進数でリストするには、以下のように入力します。
    stripnm -d a.out
  3. 16 進アドレスを使用せずに、libc.a オブジェクト・ ファイルのシンボルを古いフォーマットでリストするには、以下のように入力します。
    stripnm -xz libc.a