C コードのコール グラフの生成
特に手動での識別が現実的でない場合に、特定の関数の潜在的な実行パスを明らかにするには、次のようにします。コール グラフの生成に役立ちます。
を使用したコール グラフの作成LLVM:
LLVM (低レベル仮想マシン) を使用してコール グラフを構築するには、次の手順に従います。
-emit を使用して C コードをコンパイルします。 LLVM を生成する -llvm オプションアセンブリ:
clang++ -S -emit-llvm main.cpp -o -
-analyze フラグを指定した opt ツールを使用してアセンブリを分析します:
opt -analyze main.ll
を表す DOT ファイルを生成します電話グラフ:
opt -analyze -dot-callgraph main.ll
Graphviz を使用して DOT ファイルを画像形式に変換します:
dot -Tpng -o callgraph.png callgraph.dot
このプロセスにより、視覚的な表現が生成されますコールグラフの、ターゲットに至るすべてのパスを表示function.
例:
次の C コードを考えてみましょう:
static void D() { } static void Y() { D(); } static void X() { Y(); } static void C() { D(); X(); } static void B() { C(); } static void S() { D(); } static void P() { S(); } static void O() { P(); } static void N() { O(); } static void M() { N(); } static void G() { M(); } static void A() { B(); G(); } int main() { A(); }
上記の手順を使用すると、次のようなコール グラフを生成できます。 D() を呼び出すことができるすべての可能なパスを明らかにします。
追加考慮事項:
以上がLLVM を使用して C コードのコール グラフを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。