5
我正在開發一個靜態分析工具和python-clang-3.6
庫,可以讓我繪製函數調用圖。使用鏈接器命令進行鐺靜態分析
要正確創建TranslationUnit
我需要使用相應的編譯命令(即clang.cindex.Index.parse(c_file, compile_command)
)。但是,我相信,爲了能夠正確互連TranslationUnits
我還需要使用鏈接器命令來了解哪個TranslationUnit
使用其他TranslationUnits
的功能。這是我的項目中的一個問題,實際上有多個二進制文件正在使用一個「make」調用構建,並且有些可能會碰撞符號名稱,所以我不能假設它們都是互連的。
解決此問題的最佳方法是什麼,以便我的工具知道C文件中的哪些函數可以從其他C文件調用函數?
現在我看到兩個選項:
- 不知怎的,檢索和使用連接器的命令;這個選項似乎很棘手,因爲它不直接支持
clang
(至少鏗鏘python庫);或 - 在遍歷
TranslationUnit
的AST樹時記住頭文件中函數聲明的位置。這個選項似乎很棘手,如果由於宏處理我會得到不同的行號或具有不同的TranslationUnits
隱式函數聲明。
還有其他的選擇嗎?哪個選項以及爲什麼選擇你?