0

I have a file which contains some binaries. I am trying to use nm on these binaries to search for an object file.

My problem is, I want to output only those binaries from this file (executables.out) that contain the required symbols. Any idea how to do that?

nm --demangle `awk '{print}' executables.out` | grep <symbol> > outputfile.txt 
4

2 に答える 2

2

ファイル名を表示する何かがあるかどうかを確認するために nm の引数などを調べずに、3 行のシェル スクリプトを実行します。

for f in `cat executables.out`; do
    nm --demangle $f | grep -q REQUIRED_SYMBOL && echo $f
done

それは言う:

For each file in executables.out
    if nm output contains the required symbol
        echo the file name

nm には、簡素化するコマンド ライン オプションがある可能性があります (たとえば、ファイルから obj のリストを取得する) - OS によって異なります。

于 2012-06-26T02:10:19.017 に答える
1

のオプションはnmマシン間であまり一貫しておらず、出力形式も同じではありません。ただし、通常、出力にファイル名 (オブジェクト ファイルまたはアーカイブ メンバーまたは実行可能ファイル名) の前に付けるオプションがあります。MacOS X では、そのオプションは-o; Solaris では、-rまたは-Rです。Linux では-o、...

nm -g -o $(<executables.out) | grep -w symbol | awk -F: '{print $1}'

これにより、指定されたシンボルを定義または参照するファイルがリストされます。シンボルを定義するファイルのみを表示するには、'T' (関数) または 'C' (初期化されていないデータまたは共通データ) または 'D' (初期化されたデータ) に注目する必要があります — ただし、System V システムは別のシステムを使用します:

nm -g -o $(<executables.out) | grep -w symbol | grep ' [TCD] ' | awk -F: '{print $1}'

表記法は名前付きファイルを読み取り、その$(<file)内容を一連の引数として使用しますが、実際にコマンドを実行せずに行います (awk元の質問で実行されたバックティックを使用した表記法とは異なり、catの合理的な代替手段でしたawk)。

grep -w単語全体としてパターンを検索するため、 を検索しても、、 、 などは出力されprintfません。これは GNU拡張です。fprintfsnprintfvsnprintfgrep

于 2012-06-26T03:51:30.793 に答える