NM(1)

名前
nm - オブジェクトファイルのシンボルを一覧表示

書式
nm [-A|-o|--print-file-name]
   [-a|--debug-syms]
   [-B|--format=bsd]
   [-C|--demangle[=style]]
   [-D|--dynamic]
   [-fformat|--format=format]
   [-g|--extern-only]
   [-h|--help]
   [--ifunc-chars=CHARS]
   [-j|--format=just-symbols]
   [-l|--line-numbers] [--inlines]
   [-n|-v|--numeric-sort]
   [-P|--portability]
   [-p|--no-sort]
   [-r|--reverse-sort]
   [-S|--print-size]
   [-s|--print-armap]
   [-t radix|--radix=radix]
   [-u|--undefined-only]
   [-U|--defined-only]
   [-V|--version]
   [-W|--no-weak]
   [-X 32_64]
   [--no-demangle]
   [--no-recurse-limit|--recurse-limit]]
   [--plugin name]
   [--size-sort]
   [--special-syms]
   [--synthetic]
   [--target=bfdname]
   [--unicode=method]
   [--with-symbol-versions]
   [--without-symbol-versions]
   [objfile...]

説明
GNU nm は、オブジェクトファイル objfile... のシンボルの一覧を示します。 引数としてオブジェクトファイルが指定されていない場合、 nm はファイルを a.out と見なします。

各シンボルに対してnm は以下を表示します:

•   オプション(以下を参照)によって選択された基数のシンボル値、またはデフォルトでは16進数。

•   シンボルのタイプ。少なくとも次のタイプが使用されます。オブジェクトファイルの形式によっては、他のタイプも使用されます。小文字の場合、シンボルは通常ローカルです。大文字の場合、シンボルはグローバル(外部)です。ただし、特別なグローバルシンボル ("u" 、 "v" 、 "w") には小文字のシンボルがいくつか表示されます。

    "A" シンボルの値は絶対値であり、それ以上リンクしても変更されません。

    "B"
    "b" シンボルは、BSS データセクションにあります。通常、このセクションにはゼロで初期化されたか、初期化されていないデータが含まれますが、実際の動作はシステムに依存します。

    "C"
    "c" シンボルは共通です。共通シンボルは初期化されていないデータです。リンクする場合、複数の共通シンボルが同じ名前で表示されることがあります。シンボルがどこかに定義されている場合、共通のシンボルは未定義の参照として扱われます。 小文字の c 文字は、シンボルが小さなコモンズの特別なセクションにある場合に使用されます。

    "D"
    "d" シンボルは初期化されたデータセクション中にあります。

    "G"
    "g" シンボルは、小さいオブジェクトの初期化されたデータセクション内にあります。一部のオブジェクトファイル形式では、大規模なグローバル配列ではなく、グローバル int 変数などの小さなデータオブジェクトへのより効率的なアクセスが可能になります。

    "i" PE 形式のファイルの場合、これはシンボルが DLL の実装に固有のセクションにあることを示します。

        ELF フォーマットのファイルでは、シンボルが間接的な機能であることを示します。これは、 ELF シンボルタイプの標準セットに対する GNU 拡張です。これは、再配置によって参照された場合にそのアドレスに評価されず、実行時に呼び出される必要があるシンボルを示します。 ランタイム実行形式は、再配置で使用される値を返します。.

        注意 - GNU 間接シンボルの実際のシンボル表示は、 --ifunc-chars コマンドラインオプションで制御されます。このオプションが指定されている場合、文字列の最初の文字がグローバル間接関数シンボルに使用されます。文字列に2番目の文字が含まれている場合、その文字はローカル間接関数シンボルに使用されます。

    "I" シンボルは、別のシンボルへの間接的参照です。

    "N" シンボルはデバッグ用シンボルです。

    "n" シンボルが非データ、非コード、非デバッグの読み取り専用セクションにあります。

    "p" シンボルは stack unwind セクションにあります。

    "R"
    "r" シンボルは読み取り専用データセクションにあります。

    "S"
    "s" シンボルは、小さいオブジェクト用の初期化されていない、またはゼロで初期化されているデータセクション内にあります。

    "T"
    "t" シンボルはテキスト (コード) セクションにあります。

    "U" シンボルは未定義です。

    "u" シンボルは一意のグローバルシンボルです。これは、ELF シンボルバインディングの標準セットに対する GNU 拡張です。このようなシンボルの場合、動的リンカーは、プロセス全体でこの名前とタイプを持つシンボルが 1つだけ使用されていることを確認します。

    "V"
    "v" シンボルはウィークオブジェクトです。ウィーク定義シンボルを通常の定義シンボルにリンクすると、通常の定義シンボルがエラーなしで使用されます。 ウィーク未定義シンボルがリンクされていて、そのシンボルが未定義の場合、ウィークシンボルの値はエラーなしでゼロになります。一部のシステムでは、大文字はデフォルト値が指定されていることを示します。

    "W"
    "w" このシンボルは、ウィークオブジェクトシンボルとして特にタグ付けされていないウィークシンボルです。ウィーク定義シンボルを通常の定義シンボルにリンクすると、通常の定義シンボルがエラーなしで使用されます。 weak undefinedシンボルがリンクされ、そのシンボルが未定義の場合、シンボルの値はシステム固有の方法で決定され、エラーは発生しません。一部のシステムでは、大文字はデフォルト値が指定されていることを示します。

    "-" シンボルは、a.out オブジェクトファイル内のスタブシンボルです。この場合、出力される次の値は stabs other フィールドと stabs desc フィールドと stab タイプです。スタブシンボルは、デバッグ情報を保持するために使用されます。

    "?" シンボルタイプが不明であるか、オブジェクトファイル形式固有です。

•   シンボル名。シンボルにバージョン情報が関連付けられている場合は、そのバージョン情報も表示されます。バージョン管理されたシンボルが未定義であるか、リンカから隠されている場合、バージョン文字列はシンボル名の接尾辞として表示され、先頭に @ 文字が付きます。例 foo@VER_1. バージョンが、シンボルへのバージョン化されていない参照を解決するときに使用されるデフォルトのバージョンである場合、2つの @ 文字の後に接尾辞として表示されます。例 foo@@VER_2。

オプション
ここで選択肢として示されているオプションの長い形式と短い形式は同等です。

-A
-o
--print-file-name
    すべての記号の前に、入力ファイルを一度だけ指定するのではなく、各記号の前に、その記号が見つかった入力ファイル(またはアーカイブメンバー)の名前を指定します。

-a
--debug-syms
    デバッガ専用のシンボルも含め、すべてのシンボルを表示します。通常、これらのシンボルはリストされません。

-B  --format=bsd と同じです (MIPS nm との互換用)。

    低レベルのシンボル名をユーザーレベルの名前にデコード(demangle)します。 これにより、システムによって先頭に追加されたアンダースコアが削除されるだけでなく、C++ 関数名が読みやすくなります。コンパイラが異なれば、操作スタイルも異なります。オプションの demangling style 引数を使用すると、コンパイラに適した デコード(demangling) スタイルを選択できます。

--no-demangle
    下位レベルのシンボル名をデコード (demangle) しません。これがデフォルトです。

--recurse-limit
--no-recurse-limit
--recursion-limit
--no-recursion-limit
    文字列のデコード (demangling) 中に実行される反復の量に対する制限を有効または無効にします。名前をエンコード (mangling) する形式は無限レベルの再帰を許すので、デコード操作がホストマシンで利用可能なスタック空間の量を使い果たし、メモリ障害を引き起こすような文字列を作成する可能性があります。この制限では、再帰を 2048レベルまでのネストに制限することで、これが発生しないようにしています。

    デフォルトでは、この制限は有効になっていますが、本当に複雑な名前をデコード (demangle) するには無効にする必要がある場合があります。ただし、再帰制限が無効になっている場合は、スタックが枯渇する可能性があり、そのようなイベントに関するバグレポートは拒否されることに注意してください。

-D
--dynamic
    通常のシンボルではなく動的シンボルを表示します。これは、特定のタイプの共有ライブラリなどの動的オブジェクトに対してのみ意味があります。

-f format
--format=format
    formatの出力形式を使用します。"bsd" 、"sysv" 、"posix" 、"just-symbols" のいずれかです。デフォルトは "bsd" です。 format の最初の文字のみが重要です。大文字または小文字のいずれかになります。

-g
--extern-only
    外部シンボルのみを表示します。

    GNU 間接ファンクションシンボルを表示する場合、 nm はデフォルトでローカル間接ファンクションとグローバル間接ファンクションの両方に "i" 文字を使用します。--ifunc-chars オプションを使用すると、ユーザは1文字または2文字を含む文字列を指定できます。最初の文字はグローバル間接機能シンボルに使用され、2番目の文字 (存在する場合) はローカル間接機能シンボルに使用されます。

j   --format=just-symbols と同じです。

-l
--line-numbers
    各シンボルについて、デバッグ情報を使用してファイル名と行番号を検索します。定義されたシンボルの場合は、シンボルのアドレスの行番号を検索します。未定義シンボルの場合、シンボルを参照する再配置エントリの行番号を検索します。行番号情報が見つかれば、他のシンボル情報の後にそれを表示します。

--inlines
    オプション -l を有効にすると、アドレスがインライン化されたファンクションに属している場合、このオプションによって、すべての包含スコープのソース情報が、最初のインライン化されていないファンクションに戻されて表示されます。たとえば、 "main" が "callee2" をインライン化する "callee1" をインライン化し、アドレスが "callee2" からの場合、 "callee1" と "main" のソース情報も表示されます。

-n
-v
--numeric-sort
    シンボルを名前のアルファベット順ではなく、アドレスの数値順に並べ替えます。

-p
--no-sort
    シンボルを任意の順序で整列する必要はありません。検出された順序で出力します。

-P
--portability
    デフォルトフォーマットの代わりに POSIX.2 標準出力フォーマットを使用します。 -f posix と同じです。

-r
--reverse-sort
    整列の順序を逆にします(数値またはアルファベット)。最後のものを最初にします。

-S
--print-size
    "bsd" 形式で出力するシンボルの値とサイズの両方を表示します。 このオプションは、計算されたサイズが表示される --size-sort も使用されない限り、シンボルサイズを記録しないオブジェクト形式には影響しません。

-s
--print-armap
    アーカイブメンバーからシンボルをリストする場合は、インデックスを含めます。インデックスとは、どのモジュールにどの名前の定義が含まれているかを示すマッピング( ar または ranlib別にアーカイブに保存されています)です。

-t radix
--radix=radix
    シンボル値を表示するための基数としてradix を使用します。10進数は d、8進数は o 、16進数はx である必要があります。

-u
--undefined-only
    未定義のシンボル(各オブジェクトファイルの外部にあるシンボル)のみを表示します。 デフォルトでは、定義済みシンボルと未定義シンボルの両方が表示されます。

-U
--defined-only
    各オブジェクトファイルに定義されたシンボルのみを表示します。 デフォルトでは、定義済みシンボルと未定義シンボルの両方が表示されます。

-V
--version
    nm のバージョンを表示して終了します。

    このオプションは、nm の AIX バージョンとの互換のために無視されます。これはパラメーターを 1つ取りますが、これは文字列 32_64 でなければなりません。AIX nm のデフォルト・モードは -X 32 に対応していますが、これは GNU nm ではサポートされていません。

--plugin name
    name というプラグインをロードして、追加のターゲット・タイプのサポートを追加します。このオプションは、プラグインサポートを有効にしてツールチェーンを構築した場合にのみ使用できます。

    --plugin が指定されていないが、プラグインサポートが有効になっている場合、nm は${libdir}/bfd-plugins 内のファイルをアルファベット順に繰り返し、問題のオブジェクトを要求する最初のプラグインが使用されます。

    このプラグイン検索ディレクトリは、ld の -plugin オプションで使用されるものではないことに注意してください。nm でリンカープラグインを使用するには、それを${libdir}/bfd-plugins ディレクトリにコピーする必要があります。GCC ベースのコンパイルでは、リンカープラグインは liblto_plugin.so.0.0.0 と呼ばれます。Clang ベースのコンパイルでは、LLVMgold.so と呼ばれます。GCC プラグインは常に以前のバージョンと下位互換性があるため、最新のものをコピーするだけで十分です。

--size-sort
    サイズでシンボルを整列します。ELF オブジェクトの場合、シンボルサイズは EL Fから読み込まれます。その他のオブジェクトタイプの場合、シンボルサイズは、シンボルの値と次に大きい値を持つシンボルの値との差として計算されます。"bsd" フォーマットを使用する場合は、値ではなくシンボルのサイズが出力されます。サイズと値の両方を出力するには、-S フォーマットを使用する必要があります。

    注意 - 未定義シンボルにはサイズがないため、--undefined-only が有効になっている場合、このオプションは機能しません。

--special-syms
    ターゲット固有の特別な意味を持つシンボルを表示します。これらのシンボルは通常、何らかの特別な処理のためにターゲットによって使用され、通常のシンボルリストに含まれている場合、通常は役に立ちません。 たとえば、ARM ターゲットの場合、このオプションは ARM コード、THUMB コード、およびデータ間の遷移を示すために使用されるマッピングシンボルをスキップします。

--synthetic
    出力に Synthetic シンボルを含めます。これらは、さまざまな目的のためにリンカーによって作成された特別なシンボルです。これらはバイナリの元のソースコードの一部ではないため、デフォルトでは表示されません。

--unicode=[default|invalid|locale|escape|hex|highlight]
    文字列内の UTF-8 エンコード・マルチバイト文字の表示を制御します。 デフォルト(--unicode=default)では、特別な処理は行われません。--unicode=locale オプションを選択すると、シーケンスが現在のロケールで表示されます。ロケールによっては、サポートされない場合もあります。オプション --unicode=hex および --unicode=invalid では、不等号括弧または波括弧で囲まれた 16進バイト列として表示されます。

    --unicode=escape オプションを選択すると、これらはエスケープシーケンス(\uxxxx) として表示され、--unicode=highlight オプションを選択すると、赤色で強調表示されたエスケープシーケンスとして表示されます (出力デバイスでサポートされている場合)。色分けは、ユニコード配列の存在が予期されない場合に注意を引くことを目的としています。

-W
--no-weak
    ウィークシンボルを表示しません。

--with-symbol-versions
--without-symbol-versions
    シンボルのバージョン情報の表示を有効または無効にします. バージョン文字列は、シンボル名の接尾辞として表示され、先頭に @ 文字が付きます。例 foo@VER_1。バージョンが、シンボルへのバージョン化されていない参照を解決するときに使用されるデフォルトのバージョンである場合、2つの @ 文字の後に接尾辞として表示されます。例 foo@@VER_2。デフォルトでは、シンボルのバージョン情報が表示されます。

--target=bfdname
    システムのデフォルト形式以外のオブジェクトコード形式を指定します。 Xrefなので削る

@file
    file からコマンドラインオプションを読み込みます。読み込まれた オプションは、元の @file オプションの代わりに挿入されます。 fileが存在しない場合、または読み込めない場合、オプションは 文字通りに扱われ、削除されません。

    file 中のオプションは空白で区切られます。空白文字は、オプション 全体を一重引用符または二重引用符で囲むことによってオプションに含める ことができます。任意の文字 (バックスラッシュを含む) は、含まれる文字の 前にバックスラッシュを付けることによって含めることができます。 file 自体に追加の @file オプションを含めることができます。 このようなオプションは再帰的に処理されます。

関連項目
ar(1), objdump(1), ranlib(1), と binutils の Info エントリ。

著作権
Copyright (c) 1991-2025 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

日本語訳
対応バージョン:2.45.50 翻訳日:2025-10-13 翻訳者:ribbon