0

以下のコードから生成されたオブジェクト ファイル ( file1.o ) を調べて、一時的に導入されたコンパイラの存在を調べる方法はありますか? オブジェクト ファイルからそのような情報を取得するには、どのツールを使用できますか?

//file1.cpp
void func(const int& num){}
int main(){   func(2);  }
4

4 に答える 4

3

これを行う最も簡単な方法は、オブジェクト ファイルを使用するプログラムをロードし、デバッガーで関数を逆アセンブルすることです。あなたが投稿したプログラムコードはこれでうまくいくでしょう。への呼び出しを中断してからfunc、関数にシングルステップインするときにアセンブラーを表示します。

より複雑なプログラムでは、通常、特定の関数のアセンブラー コードを名前で表示できます。これを行う方法については、デバッガーのドキュメントを確認してください。Windows (Visual Studio) では、Disassemblyウィンドウを開き、関数の名前を入力してアセンブラー コードを表示できます。

ソースがあれば、ほとんどのコンパイラでアセンブラを出力できます。ソース コードと混合されることもあります。Visual C++ の場合、これは/Faです。

于 2010-11-24T14:56:29.327 に答える
0

ELF システムを使用していて、GNU binutils を使用している場合はreadelf、おそらく-sスイッチを使用して を呼び出すことができます。

于 2010-11-24T14:56:42.260 に答える
0

ソースを入手できる場合は、コンパイラーによって生成されたアセンブラー・ファイル (gcc の場合は -save-temps) を見る方がおそらく簡単です。そうでなければ、objdumpあなたの友達です。

于 2010-11-24T14:58:41.040 に答える
0

を使用clang -cc1 --ast-print-xmlして、翻訳単位の XML 表現を取得できます。一時変数の存在は、AST から簡単に検出できます。

于 2010-11-24T15:00:33.740 に答える