もっと詳しく

システムレベルのソフトウェア開発にも携わっているLinuxユーザーの場合、オブジェクトファイル内のシンボルに関連する情報が必要な状況に陥る可能性があります。 コマンドラインユーティリティが存在することを知って喜ぶでしょう-吹き替え nm -これらの状況で使用できます。

このチュートリアルでは、わかりやすい例を使用して、このツールの基本について説明します。 ただし、その前に、ここでのすべての例がUbuntu16.04LTSマシンでテストされていることを言及する価値があります。

Linuxnmコマンド

nmコマンドラインユーティリティは、基本的にオブジェクトファイルからのシンボルを一覧表示します。 ツールの構文は次のとおりです。

nm [OPTIONS] OBJECT-FILENAME

そして、以下はコマンドのマニュアルページがそれを説明する方法です:

       GNU nm lists the symbols from object files objfile....  If no object
       files are listed as arguments, nm assumes the file a.out.

以下は、nmがどのように機能するかについてのより良いアイデアを提供するいくつかのQ&Aスタイルの例です。

Q1。 nmコマンドはどのように機能しますか?

このコマンドの基本的な使用法は非常に簡単です。「nm」コマンドを実行し、オブジェクトファイルの名前を入力として渡すだけです。 たとえば、「apl」バイナリファイルでnmコマンドを使用しました。

nm apl

次のスクリーンショットは、上記のコマンドが生成した出力の種類を示しています。

出力で生成される3つの列は、それぞれシンボル値、シンボルタイプ、およびシンボル名を表します。 シンボルにはいくつかの種類があります。完全な詳細を知るには、nmコマンドのマニュアルページにアクセスしてください。

Q2。 出力の各シンボルの前にファイル名を付けるにはどうすればよいですか?

これはあなたが使用して行うことができます -A コマンドラインオプション。

nm -A [obj-file]

例えば:

nm -A apl

したがって、各行の先頭にファイル名が追加されていることがわかります。

Q3。 nmにデバッガシンボルも表示させる方法は?

nmが出力にデバッガシンボルも表示するようにするには、 -a コマンドラインオプション。

nm -a [obj-filename]

例えば:

nm -a apl

上記のコマンドは、通常はリストされていないデバッガーのみのシンボルを含むすべてのシンボルを表示します。

Q4。 nmに低レベルのシンボル名をデコードさせる方法は?

必要に応じて、nmに低レベルのシンボル名をユーザーレベルの名前にデコードさせることもできます。 これは、-Cコマンドラインオプションを使用して実行できます。

nm -C [obj-file]

例えば:

nm -C apl

このオプションについてのマニュアルページの内容は次のとおりです。

           Besides removing any initial underscore prepended by the system,
           this makes C++ function names readable. Different compilers have
           different mangling styles. The optional demangling style argument
           can be used to choose an appropriate demangling style for your
           compiler.

Q5。 nmに動的シンボルのみを表示させる方法は?

nmに通常のシンボルではなく動的なシンボルのみを表示させたい場合は、 -D コマンドラインオプション。

nm -D [obj-file]

例えば:

nm -D apl

したがって、nmが出力で動的シンボルのみを生成したことがわかります。

Q6。 異なるnm出力フォーマットを使用するにはどうすればよいですか?

さまざまな出力形式を有効にするには、-fコマンドラインオプションを使用します。 デフォルトでは、出力はbsd形式で生成されますが、必要に応じて、「sysv」および「posix」形式を有効にすることもできます。

nm -f [format] [obj-filename]

例えば:

nm -f posix apl

ここでフォーマットの変更を観察します。

Q7。 nmに外部シンボルのみを表示させるにはどうすればよいですか?

これは、-gコマンドラインオプションを使用して実現できます。

nm -g [obj-file]

例えば:

nm -g  apl

Q8。 nmが提供するすべてのソートオプションは何ですか?

デフォルトでは、記号はアルファベット順にソートされています。 ただし、必要に応じて、を使用してアドレスで数値で並べ替えることができます。 -n コマンドラインオプション。

nm -n [objfile]

例えば:

nm -n apl

これで、出力がアドレスでソートされていることがわかります。

nmに(デフォルトで使用されるものを含めて)どのような種類のソートも適用させたくない場合は、-pコマンドラインオプションを使用します。 次に進み、既存の並べ替えを元に戻すには、-rコマンドラインオプションを使用します。

Q9。 nmに未定義のシンボルのみを表示させるにはどうすればよいですか?

これはあなたが使用して行うことができます -u コマンドラインオプション。

nm -u [obj-file]

例えば:

nm -u apl

Q10。 nmに定義済みの記号のみを表示させるにはどうすればよいですか?

nmに定義済みの記号のみを表示させるには、 –定義済みのみ コマンドラインオプション。

nm --defined-only [obj-file]

例えば:

nm --defined-only apl

結論

同意しました。nmコマンドにはニッチなオーディエンスがいますが、私の個人的な経験では、自分をそのオーディエンスの一部と見なしていなくても、そのようなツールが存在することを覚えておいてください。 そして、このユーティリティを使用したい人は、ここですべての例を練習したら、 nmのマニュアルページ もっと知るために。

The post 初心者向けのLinuxnmコマンドチュートリアル(10例) appeared first on Gamingsym Japan.