2015-06-29 45 views
5

我正在開發一個靜態分析工具和python-clang-3.6庫,可以讓我繪製函數調用圖。使用鏈接器命令進行鐺靜態分析

要正確創建TranslationUnit我需要使用相應的編譯命令(即clang.cindex.Index.parse(c_file, compile_command))。但是,我相信,爲了能夠正確互連TranslationUnits我還需要使用鏈接器命令來了解哪個TranslationUnit使用其他TranslationUnits的功能。這是我的項目中的一個問題,實際上有多個二進制文件正在使用一個「make」調用構建,並且有些可能會碰撞符號名稱,所以我不能假設它們都是互連的。

解決此問題的最佳方法是什麼,以便我的工具知道C文件中的哪些函數可以從其他C文件調用函數?

現在我看到兩個選項:

  1. 不知怎的,檢索和使用連接器的命令;這個選項似乎很棘手,因爲它不直接支持clang(至少鏗鏘python庫);或
  2. 在遍歷TranslationUnit的AST樹時記住頭文件中函數聲明的位置。這個選項似乎很棘手,如果由於宏處理我會得到不同的行號或具有不同的TranslationUnits隱式函數聲明。

還有其他的選擇嗎?哪個選項以及爲什麼選擇你?

回答

1

我不確定是否需要使用clang從源文件中提取信息,或者只需從生成的二進制文件中提取信息即可。

如果你想看到在二進制中使用的符號,你可以使用

readelf -s <file> 

此列出符號表,你可以提取,如果符號由二進制提供或者要求(進口)。

使用

readelf -d <file> | grep NEEDED 

你依賴庫列表。

相關問題