必威电竞|足球世界杯竞猜平台

控制流分析
來源:互聯(lián)網(wǎng)

控制流分析(Control flow analysis)簡稱CFA,是一種確認(rèn)程序控制流程的靜態(tài)代碼分析技術(shù)。控制流程會以控制流圖來表示。對于函數(shù)編程語言及面向?qū)ο蟪淌皆O(shè)計,CFA都是指計算控制流程的算法。控制流分析一詞最早是由Neil D. Jones及Olin Shivers開始使用。抽象釋義、約束補償及型別系統(tǒng)都可以用來進行控制流分析。

簡介

程序代碼的靜態(tài)分析就是通過檢查程序的源代碼來推測程序運行時的行為信息。靜態(tài)分析出了能夠檢查指定程序中存在的錯誤和安全漏洞以外,同時還能夠?qū)⑵渌枷爰尤氲酱a編譯器中,用于程序的優(yōu)化。那么以何種方式才能夠?qū)㈧o態(tài)分析用于優(yōu)化,最關(guān)鍵的技術(shù)點就是流分析技術(shù)。流分析技術(shù)是比較傳統(tǒng)的編譯器優(yōu)化技術(shù),流分析能夠保證程序內(nèi)容真實性的狀態(tài)下,確定一個指定程序節(jié)點的相對路徑的事實。流分析技術(shù)從大體上分類,分為控制流分析和數(shù)據(jù)流分析。

控制流分析是一類用于分析程序控制流結(jié)構(gòu)的靜態(tài)分析技術(shù),目的在于生成程序的控制流圖,在編譯器設(shè)計、程序分析、程序理解等領(lǐng)域都有重要應(yīng)用。對程序的控制流分析是對源程序或者源程序的中間表示形式的直接操作,形成控制流圖;數(shù)據(jù)流分析是在控制流分析后得出的控制流圖的基礎(chǔ)上,將程序中的包含數(shù)據(jù)的變量沿著控制流圖的路徑,進行賦值和傳遞,直至程序完成,變量回收或者未被回收。那么從邏輯關(guān)系而言,控制流分析是先于數(shù)據(jù)流分析的,控制流分析對數(shù)據(jù)流分析有著先導(dǎo)性和支持性的作用。

類別

控制流分析在從程序的特點上說明,可以將其看作兩個大類:過程內(nèi)的控制流分析和過程間的控制流分析。過程內(nèi)的控制流分析可以簡單的理解為是對一個函數(shù)內(nèi)部的程序執(zhí)行流程的分析,而過程間的控制流分析一般情況下指的是函數(shù)的調(diào)用關(guān)系的分析。從控制流分析的特點上看,主要的分析還是基于過程內(nèi)的控制流分析,針對過程內(nèi)的控制流分析,有兩種主要的方法:一種方法是利用某些程序執(zhí)行過程中的必經(jīng)點,查找程序中的環(huán),根據(jù)程序優(yōu)化的需求,對這些環(huán)增加特定的注釋,這種方法最理想的使用是迭代數(shù)據(jù)流優(yōu)化器;另一種方法是區(qū)間分析,這里定義的區(qū)間包含了子程序整體結(jié)構(gòu)的分析和嵌套區(qū)域的分析,由分析可以對源程序進行控制樹的構(gòu)造,控制數(shù)即在源程序的基礎(chǔ)上將程序按照執(zhí)行的邏輯順序,構(gòu)造一顆與源程序?qū)?yīng)的樹形數(shù)據(jù)結(jié)構(gòu),控制樹可以在數(shù)據(jù)流分析階段發(fā)揮關(guān)鍵的作用,當(dāng)然,不是所有的控制流分析都是簡單的,較為復(fù)雜的控制流分析是基于復(fù)雜區(qū)間的結(jié)構(gòu)分析,這樣的分析可以分析出子程序塊中所有的控制流結(jié)構(gòu)。但無論上述哪種方法的控制流分析,都需要先確定子程序的基本塊,再根據(jù)基本塊,進行程序控制流圖的構(gòu)造。

靜態(tài)分析

對于程序的靜態(tài)分析,指的是在代碼不運行的方式下,對程序的源代碼通過詞法分析、語法分析以及針對程序執(zhí)行邏輯的控制流的分析,來預(yù)測代碼執(zhí)行的結(jié)果,以判斷執(zhí)行結(jié)果是否滿足安全性、可靠性的用戶需求。因此,針對靜態(tài)分析的執(zhí)行特點,需要用戶提供需要分析的目標(biāo)源代碼,而且靜態(tài)分析往往需要結(jié)合人為的干預(yù)。通常,靜態(tài)分析具有以下幾個特點:不實際執(zhí)行程序,執(zhí)行速度快,誤報率加高。對于前兩個特點,都較好理解,符合靜態(tài)分析的執(zhí)行過程,第三個特點也是靜態(tài)分析中不可避免的,因為靜態(tài)分析的人為干預(yù)因素較多,在靜態(tài)分析的過程中,人為因素占據(jù)著分析結(jié)果中的較大成分,也正是人為干預(yù)所不能保證 100%的正確率,這就不可避免的增加了結(jié)果錯誤分析的幾率。

控制流圖

控制流圖(Control Flow Graph, CFG)也叫控制流程圖,是一個過程或程序的抽象表現(xiàn),是用在編譯器中的一個抽象數(shù)據(jù)結(jié)構(gòu),由編譯器在內(nèi)部維護,代表了一個程序執(zhí)行過程中會遍歷到的所有路徑。它用圖的形式表示一個過程內(nèi)所有基本塊執(zhí)行的可能流向, 也能反映一個過程的實時執(zhí)行過程。控制流圖中每個在圖形中的節(jié)點代表一個基本塊,例如,沒有任何跳躍或跳躍目標(biāo)的直線代碼塊;跳躍目標(biāo)以一個塊開始,和以一個塊結(jié)束。定向邊緣被用于代表在控制流中的跳躍。在那里,在大部分介紹中,兩個特定的設(shè)計塊:項目塊,通過它控制到流圖的輸入,和編輯塊,通過它全面控制流輸出。

參考資料 >

生活家百科家居網(wǎng)