以下のコードから生成されたオブジェクト ファイル ( file1.o ) を調べて、一時的に導入されたコンパイラの存在を調べる方法はありますか? オブジェクト ファイルからそのような情報を取得するには、どのツールを使用できますか?
//file1.cpp
void func(const int& num){}
int main(){ func(2); }
以下のコードから生成されたオブジェクト ファイル ( file1.o ) を調べて、一時的に導入されたコンパイラの存在を調べる方法はありますか? オブジェクト ファイルからそのような情報を取得するには、どのツールを使用できますか?
//file1.cpp
void func(const int& num){}
int main(){ func(2); }
これを行う最も簡単な方法は、オブジェクト ファイルを使用するプログラムをロードし、デバッガーで関数を逆アセンブルすることです。あなたが投稿したプログラムコードはこれでうまくいくでしょう。への呼び出しを中断してからfunc
、関数にシングルステップインするときにアセンブラーを表示します。
より複雑なプログラムでは、通常、特定の関数のアセンブラー コードを名前で表示できます。これを行う方法については、デバッガーのドキュメントを確認してください。Windows (Visual Studio) では、Disassembly
ウィンドウを開き、関数の名前を入力してアセンブラー コードを表示できます。
ソースがあれば、ほとんどのコンパイラでアセンブラを出力できます。ソース コードと混合されることもあります。Visual C++ の場合、これは/Faです。
ELF システムを使用していて、GNU binutils を使用している場合はreadelf
、おそらく-s
スイッチを使用して を呼び出すことができます。
ソースを入手できる場合は、コンパイラーによって生成されたアセンブラー・ファイル (gcc の場合は -save-temps) を見る方がおそらく簡単です。そうでなければ、objdump
あなたの友達です。
を使用clang -cc1 --ast-print-xml
して、翻訳単位の XML 表現を取得できます。一時変数の存在は、AST から簡単に検出できます。