四類程序分析

1、靜態分析VS動態分析
靜態分析:包括分析程序的源碼和機器碼(在不運行的情況下);很多工具進行靜態分析,尤其是編譯器;例如,編譯器通過進行靜態分析來分析正確性(correctness),例如類型檢查;用來進行性能優化;一些靜態分析可以鑑別bugs或者使代碼可視化;只需要讀入代碼,然後對它進行分析。
動態分析:當客戶程序執行的時候進行分析;現存很多工具來進行動態分析,例如,分析器(profilers)、checkers and execution visualisers(校驗器和模擬器);
要想分析程序,必須對客戶程序運用分析代碼插樁。分析代碼可以完全內嵌,也可以包括額外的程序(由內嵌代碼調用)。分析程序作爲程序正常執行的一部分,不會干擾程序的執行(否則可能使程序運行變慢),但是可以做一些額外工作,比如測量性能,識別bug。這些分析代碼必須維持多類分析狀態。
     兩種方法是互補的,靜態可以考慮到程序中所有執行路徑,動態分析通常不全面,只是考慮單條執行路徑。動態比靜態更精確,因爲它是運用真實的值在跑程序。動態分析比靜態分析一般簡單。

2、源碼分析 VS 二進制分析
源碼分析:涉及在source code 層面分析程序。很多工具執行源碼分析,編譯器仍然是個好的例子。這種分類包括來自源碼基於程序表現的分析,例如控制流圖。源碼分析通常依據程序語言結構,比如函數、語句、表達式和變量。
二進制分析:涉及在機器碼層面分析,存在形式爲目標代碼(pre-linking)或者執行代碼(post-linking)(是否鏈接庫)。這類分析執行在可執行的中間表示層,例如字節代碼(可以運行在虛擬機上)。二進制分析通常依據機器實體,例如過程、指令、寄存器和內存地址。
     源碼分析對不依賴於平臺(架構和操作系統),但是是語言相關的;二進制分析時編程語言無關,但是平臺相關。源碼分析可以得到高層次信息,使分析更強大;相反,二進制分析可以得到低層次信息(例如,寄存器的分配結果)他需要一些任務。二進制分析不需要源碼,源碼在系統中經常是不存在的。

四類分析:static source analysis、dynamic source analysis、static binary analysis、dynamic binary analysis。

3、靜態二進制插樁 vs 動態二進制插樁
根據出現時間不同,對於程序分析可以分爲兩種主要插樁技術:
靜態二進制插樁發生在程序執行前,在重寫目標代碼或者執行代碼階段;
動態二進制插樁技術發生在運行階段。可以通過程序或者另外進程將分析代碼拼接到客戶進程上。如果客戶端用的是動態鏈接代碼,需要在動態鏈接後再添加分析程序。

插樁有純軟件實現插樁、也可以藉助硬件和微程序操作。

動態二進制插樁有兩個明顯優勢。第一,不需要準備客戶程序,對用戶來說很方便。第二,它本來包含了所有客戶端代碼;如果代碼和數據是混合的或者運用了不同的模塊,對所有代碼進行靜態插樁比較困難, 通過客戶端用動態生成代碼來動態插樁所有代碼是不可能的。對所有代碼進行插樁的能力對函數庫正確性和完全操縱很重要。DBI有兩個缺點:第一,在運行時會體現插樁的代價;第二、很難實現在運行時重寫執行代碼。

{譯自:Dynamic Binary Analysis and Instrumentation or Building Tools is Easy}


發佈了47 篇原創文章 · 獲贊 9 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章