為C 程式碼產生呼叫圖
為了發現特定函數的潛在執行路徑,特別是在手動識別不切實際的情況下,對於產生呼叫圖很有用。
使用LLVM 建立呼叫圖:
要使用LLVM(低階虛擬機)建立呼叫圖,請依照下列步驟操作:
使用-emit-llvm 選項編譯C 程式碼以產生LLVM 程式集:
clang++ -S -emit-llvm main.cpp -o -
使用opt 分析程式集帶有-analyze 標誌的工具:
opt -analyze main.ll
產生表示呼叫圖的DOT 檔案:
opt -analyze -dot-callgraph main.ll
轉換DOT 檔案使用Graphviz 轉換為影像格式:
dot -Tpng -o callgraph.png callgraph.dot轉換DOT 檔案使用Graphviz 轉換為影像格式:
此過程將產生呼叫圖的視覺化表示,顯示通往目標函數的所有路徑。
範例:
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(); }
考慮以下C 程式碼:
使用上面概述的步驟,我們可以產生一個呼叫圖,其中顯示D () 所經過的所有可能路徑可以被呼叫。
以上是如何使用 LLVM 產生 C 程式碼呼叫圖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!