如何學好程式的靜態分析?

時間 2021-05-08 18:42:04

1樓:ChenJoya

就簡易+迅速入門而言的話,丹麥的 Aarhus University 有一門 Static Program Analysis ,裡面配套的 PDF spa.pdf 和 PPT,在實踐部分,有配套的乙個叫 TIP 的語言做資料流分析、路徑敏感、過程間分析、指標分析等章節的練習。

書中的練習題很多而且沒答案(而且找 Anders Mller 要他說只給老師 。。。),自己也做了一部分習題(有需要的可以找我要),此外在看 SPA 的同時可以加著對照北大熊老師的 軟體分析技術 一起來看。

為什麼說比較友好入門呢,因為好像連我竟然都好像能看懂,嚶嚶嚶 。。。

2樓:yutian

通過看優秀的靜態分析工具的手冊,對你學習靜態分析會有很大的幫助。比如中國產靜態分析工具:雨田靜態分析系統2.

6,老外的testbed,jtest等的手冊,都包含了豐富的靜態分析知識。

3樓:李寧

1.靜態分析是不涉及時間變數,就是分析經濟現象的均衡狀態以及達到裝均衡的條件,完全抽象掉了時間和變動過程因素。2.

比較靜態分析就是分析已知條件發生變化後均衡狀態相應的前後變化,也就是比較某個變化過程的起點和終點,不涉及過程。

4樓:PGAnalyzer

使用和熟悉靜態工具和開源專案是很有必要的,推薦使用 SVF,乙個基於LLVM靜態指標和程式依賴關係分析的開源框架, 包括全程式呼叫圖建立,流敏感,上下文敏感的指標分析,基於資料流和控制流的軟體錯誤檢測,例如記憶體洩漏,空指標,檔案開關等。SVF 可以高效精確分析大規模程式並具有優秀的構架設計,可擴充套件性,及較多的文件,適於初學者和深入研究靜態分析,程式語言和編譯的朋友。

SVF-tools/SVF

UTS Australia 現招收軟體工程方向博士生,優秀學生提供全獎,詳情請見:

5樓:bin li

關於資料流分析&抽象解釋的書建議看

這本書的優點是:08年的書,並且專門講資料流分析,理論和實踐都有,很讚,下面是它的摘要:

This work provides an in-depth treatment of data flow analysis technique. Apart from including interprocedural data flow analysis, this book is the first to extend detailed coverage of analysis beyond bit vectors. Supplemented by numerous examples, it equips readers with a combination of mutually supportive theory and practice, presenting mathematical foundations and including study of data flow analysis implementation through use of the GNU Compiler Collection (GCC).

Readers can experiment with the analyses described in the book by accessing the authors web page, where they will find the source code of gdfa (generic data flow analyzer).

裡面實踐部分使用GCC,建議改為LLVM。

其他答案很讚了,我稍作補充~~~~~~~~~

Model checking和抽象解釋確實很像(見陳偉的答案,直譯器的說法很讚,"抽象解釋"的"解釋"的含義是不是就是直譯器的意思?!),很多資料流分析的問題都可以用LTL(Linear temporal logic)描述。Model checking技術也用到了程式分析中,叫做Software Model Checking,如果感興趣可以找一些survey看看。

Symbolic execution 是另一種靜態分析方法,主要用於Automatic test generation,當然也可以Proving program properties 或者 Static detection of runtime errors,它的後端用到了SMT求解路徑約束(陳偉的答案,SMT solver原理感興趣可以研究,一般拿來用即可)。感興趣找一些survey看看(A survey of new trends in symbolic execution for software testing and analysis 感覺不錯: http:

//ti.arc.nasa.gov/publica

tions/140/download/

)。KLEE(KLEE)是基於LLVM的Symbolic execution的開源工具。

既然談到了Symbolic execution那就談一談Program proof,畢竟大家同根生,待遇大不同(%>_<%)(Floyd-Hoare Logic,Computer strongest postconditions is symbolic execution.乙個前向,乙個後向).Program proof可以看看Hoare Logic (CST Part II).

當然還有Separation logic-Hoare Logic在指標資料結構上的擴充套件。

6樓:韓飛

我的本科畢設寫了乙個Ruby靜態分析,分享一下原始碼:hanfei19910905/mini-RubySonar

yinwang0/rubysonar · GitHub

7樓:

這方面我並沒有研究經驗,只有使用過相關工具。

Sonar中整合了Findbugs和Checkstyle這倆靜態分析工具,你可以看下。

如何學好c 程式開發?

杉楓 msdn是很好的幫助文件,學好基本語法,多去用,做些自己想做的小系統小工具,再配合看書,會很快掌握一門語言的。核心是多看,多用,多練,多思考。 徐曉軼 客人要的是美味可囗的飯菜 要解決他的實際問題 語言只是刀,鍋,鏟子而已 你對業務領域的了解是原材料 你的it專業技能是調味料 你的邏揖思維能力...

如何學好線性回歸分析?

暮雪寒泉 首先,你需要了解線性回歸的理論假設和數學推導,線性回歸有幾個很強的假設 1 模型的整體的形式是線性 2 嚴格外生性,即擾動項與自變數是無關的 3 不存在多重共線性,即乙個自變數不可以是另乙個或其他自變數的線性組合 4 擾動項滿足同方差和無自相關的假設 然後,對於一元線性回歸 y ax b ...

該如何學好數學分析?

左筆一支 為什麼要學實數理論,因為實數R是學到的第乙個完備集,就是說處處稠密 或者說這個集裡面的柯西列的極限依然在這個集裡面 這個定理是最重要的 以及諸如此類的另外6個實數定理一共7個 而後面泛函分析還要學到一些 以實數為底空間的 函式空間和 以函式空間為底空間的 運算元空間,某些這些空間也是完備的...