Linuxnmコマンドの使用法と意味に関する注意



Linux Nm Command Usage



多くの場合、ライブラリ自体の実装に注意を払わないか、基になるロジックがまったく表示されませんが、一部の関数または変数の名前を確認する必要があります(競合のトラブルシューティングなど)。今回は、非常に基本的ですが非常に便利なツール「nm」を使用する必要があります。


1nmコマンドの紹介

NAME nm - list symbols from object files SYNOPSIS 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] [-l|--line-numbers] [-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] [-V|--version] [-X 32_64] [--defined-only] [--no-demangle] [--plugin name] [--size-sort] [--special-syms] [--synthetic] [--target=bfdname] [objfile...] DESCRIPTION GNU nm lists the symbols from object files objfile.... If no object files are listed as arguments, nm assumes the file a.out. For each symbol, nm shows: # ... run man nm for detials.

簡単に言うと、ターゲットで定義された要件を満たすシンボルをリストするのに役立ちます。要件は、主にパラメータによって多数発生する可能性があります。外部から導入、内部で定義、動的...パラメータを追加して、nmに行番号、ファイル名、およびその他の関連情報を同時に出力させることもできます。



結果の2nmの意味

nmが検出するシンボル値は16進のデフォルトで表され、それらのタイプは関数の前に追加されます。タイプは次のとおりです。

説明 注意
シンボルの値は絶対値であり、さらにリンクしても変更されません。 絶対記号、リンクプロセスは変更されません
B / b シンボルは、初期化されていないデータセクション(BSSと呼ばれます)にあります。 初期化されていないシンボル
C シンボルは一般的です。 リンク時に同じ名前のシンボルで覆われるパブリックシンボル
D / d シンボルは初期化されたデータセクションにあります。 初期化記号
G / g シンボルは、小さなオブジェクトの初期化されたデータセクションにあります。 小さなデータアクセスの最適化のための初期化シンボル
シンボルは、別のシンボルへの間接的な参照です。 他のシンボルへの間接参照
N シンボルはデバッグシンボルです。 デバッグシンボル
P シンボルはスタック巻き戻しセクションにあります。 スタック領域シンボル(空)
R / r シンボルは読み取り専用データセクションにあります。 記号は読み取り専用
S / s シンボルは、小さなオブジェクトの初期化されていないデータセクションにあります。 小さなデータアクセスの最適化のための初期化されていないシンボル
T / t 記号はテキスト(コード)セクションにあります。 コードエリア記号
U シンボルは未定義です。 未定義または外部定義のシンボル
u シンボルは、一意のグローバルシンボルです。 世界的にユニークなGNU予約
V / v シンボルは弱いオブジェクトです。 弱い区切り文字(C ++の強い記号と弱い記号の定義を参照)
W / W シンボルは、弱いオブジェクトシンボルとして具体的にタグ付けされていない弱いシンボルです。 えーと...タワーパスワード記号
- シンボルは、a.outオブジェクトファイル内のスタブシンボルです。 スタッブフォーマット記号
シンボルタイプが不明であるか、オブジェクトファイル形式に固有です。 NMは記号を認識しません

栗を与えるだけです:



root@xxxxx:/usr/lib64$ nm libpthread.a nptl-init.o: U __default_pthread_attr U __default_pthread_attr_lock U _dl_cpuclock_offset U _dl_get_tls_static_info U _dl_init_static_tls U _dl_pagesize U _dl_wait_lookup_done U __fork_generation U __getrlimit U __is_smp U __libc_fatal 0000000000000008 C __libc_multiple_threads_ptr U __libc_pthread_init U __libc_setup_tls U __libc_sigaction U __libc_stack_end U __lll_lock_wait_private U __lll_unlock_wake_private 0000000000000000 b __nptl_initial_report_events 00000000000001b0 T __nptl_set_robust U __nptl_setxid_error 0000000000000000 r nptl_version 00000000000004b0 T __pthread_get_minstack 00000000000001d0 T __pthread_initialize_minimal 00000000000001d0 T __pthread_initialize_minimal_internal

nmの解析結果と記号定義の説明で、ご希望の記号がとても嬉しいです!