999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于CPA的抽象解釋分析方法研究

2017-10-26 12:08:01張弛黃志球丁澤文劉林武
計算技術與自動化 2017年3期

張弛 黃志球 丁澤文 劉林武

摘要:安全關鍵領域中,如何保證軟件安全性已經成為了一個廣受關注的重要課題。確保程序中沒有運行時錯誤,對于軟件安全性的保證十分重要?;诔橄蠼忉尩撵o態分析方法對程序語義進行抽象,是驗證運行時錯誤最合適的形式化方法之一。可配置程序分析(configurable program analysis,CPA)是一種適合多種靜態分析方法的通用分析框架。本文使用CPA對抽象解釋分析方法進行建模,給出了使用基于CPA的抽象解釋方法驗證程序中的運行時錯誤的驗證流程,并用實例說明該驗證方法的有效性。為程序中運行時錯誤的自動化分析和驗證提供了一種可行方案。

關鍵詞:可配置程序分析;抽象解釋;靜態分析;運行時錯誤驗證

中圖分類號:TP311文獻標識碼:A

Abstract:How to ensure software safety has become an important subject in safety critical domain.Ensuring the absence of runtime errors in the program is very important for the safety of the software.The program semantics was abstracted by the static analysis method based on abstract interpretation,and it is one of the most appropriate formal methods for validating runtime errors.Configurable program analysis is a general analytical framework for a variety of static analysis methods.The CPA is used to model the abstraction analysis method,and the validation process of using CPAbased abstract interpretation method to verify the runtime errors in the program is given.Then the effectiveness of the method is illustrated by an example.This provides a feasible solution for the automatic analysis and verification of runtime errors in the program.

Key words:configurable program analysis;abstract interpretation;static analysis;runtime error verification

1引言

近年來,隨著軟件在醫療、交通、航空航天等安全關鍵領域的廣泛應用,軟件已經成為決定系統安全性的主導因素,如何提高軟件質量,保證系統安全性,防止災害事故的發生,已經成為當前工業界和學術界的重要研究課題[1]。程序作為軟件的核心,對于程序中運行時錯誤的驗證是確保軟件安全重要的一環。運行時錯誤是一類特定的軟件錯誤,是指程序在運行時或運行后發生的錯誤,并不是軟件需求和設計階段引入的問題,而是在程序編寫時,由于違反程序語言的安全性規范而引入的問題[2]。例如程序中出現除數為零的情況、程序中出現數組下標越界的情況等等。

工業界常用的仿真、模擬、測試等手段可以發現大部分運行時錯誤,但卻無法保證軟件中沒有運行時錯誤[3]。形式化分析與驗證方法是保障軟件安全性和可靠性的一種重要方法。學術界目前主要使用形式化的靜態分析方法來對運行時錯誤進行分析和驗證。形式化的方法如模型檢測[4]需要窮舉所有狀態空間,存在狀態空間爆炸的問題;定理證明[5]需要大量人工參與,難以自動化。抽象解釋對程序語義進行抽象,將程序的具體語義轉化到抽象域中對程序的性質進行分析[6]。其根據需求對程序語義進行近似,調節靜態分析的精度和效率,是目前對運行時錯誤進行分析和驗證的主要方法。

可配置程序分析是一個形式化的進行軟件驗證和程序分析的通用框架。旨在用一種通用的形式化體系,通過配置不同的參數,來設計實現多種靜態分析方法[7]。因此可以使用基于CPA的靜態分析框架來對抽象解釋的分析階段進行建模。來對運行時錯誤進行分析和驗證。

本文第2節簡單介紹抽象解釋中的基本概念和用于之后分析的區間抽象域。第3節具體介紹CPA靜態分析框架的形式化體系表示方法及相應的迭代算法。第4節給出運行時錯誤的具體驗證流程。第5節用一個實例來解釋說明如何使用該方法,來對程序中的運行時錯誤進行分析和驗證。第6節,結束語。

2相關理論

21基于格的抽象解釋

抽象解釋理論是P.Cousot和R.Cousot于1977年提出的對程序語義進行可靠近似理論[8][9]。其基本思想是用抽象語義代替具體語義來描述源程序語言,利用得到的抽象語義來實現具體語義的計算,程序的抽象執行的結果能反映程序真實執行的部分信息。抽象解釋本質上是一種基于格的程序分析方法,下面給出一些相關的基礎概念。

定義2.1偏序:如果≤是p上的二元關系,如果p中所有元素都具有自反性、傳遞性和反對稱性,則稱≤為p上的偏序關系,稱為一個(p,≤)偏序集。

定義2.2格:對于偏序集(P,≤),若P中任意兩個元素都存在上確界和下確界,則稱(P,≤)是格,為方便,這樣的格稱為偏序格。

定義2.3完備格:對于格(P,≤)如果存在最小元素和最大元素,則稱其為完備格,完備格可以用一個六元組來(P,≤,∪,∩,⊥,T)表示,其中∪表示最小上屆,∩表示最大下界,⊥表示集合P中最小元,T表示集合P中最大元。

定義2.4伽羅瓦(Galois)連接[10]:如果兩個偏序集(P,≤)和(P*,≤*)之間存在轉化函數α:P→P*和逆向轉化函數Y:P*→P,當對x∈P,x*∈P*,α(x)≤*x*x≤γ(x*)則稱轉化函數構成的函數對(α,γ)為集合P和P*之間的伽羅瓦連接,記作:

(P,≤)αγ(P*,≤*)

其中,稱(P,≤)為具體域,(P*,≤*)為抽象域,轉化函數α為抽象函數,轉化函數γ為具體函數。

22區間抽象域

區間抽象域在靜態分析過程中,主要用于表示某程序點處某一變量可能取到的最小值和最大值所構成的區間來近似[11]。具體域和抽象域之間的關系可以通過下面一個Galois連接來表示:

(R,≤)αγ(Itvs,i)

區間抽象域可以用一個完備格來表示,即(Itvs,i,∪i,∩i,⊥i,Ti),其中,Itvs是實數R上的區間的集合,其形式化的表示為:

{[a,b]|a∈R∪{-∞},b∈R∪{+∞},a≤b}∪{⊥i}。

i是Itvs上的偏序關系,形式化定義為:[a,b]i[a′,b′]當且僅當[a,b]=⊥i或者a≥a′^b≤b′,⊥i為集合上的最小元,滿足γ(⊥i)Δ,(-∞,+∞)為集合上的最大元,滿足對I∈Itvs,Ii[-∞,+∞]。通過這樣的方式可以將程序中變量的取值抽象成形如a≤x≤b的約束,可以用于與分析變量取值范圍相關的程序屬性驗證,例如除零錯或數組越界的驗證。"

3基于CPA的抽象解釋分析方法

CPA是一個形式化的軟件驗證和程序分析的通用框架,可以通過配置參數來實現不同靜態分析方法。基于CPA的抽象解釋靜態分析方法以程序控制流圖為分析對象,選擇不同抽象精度的抽象域來決定分析過程的抽象層次,選擇不同的merge操作和stop操作來配置不同的迭代分析算法。其配置分析過程如圖1所示。

在CPA配置分析過程中,將程序控制流圖信息結合抽象域的定義,得到抽象狀態的遷移關系;根據抽象域中域操作的定義配置CPA迭代算法中的merge操作和stop操作。根據抽象狀態的遷移關系,執行CPA迭代算法來求解不動點抽象值,抽象狀態之間通過merge操作來合并形成新的抽象狀態,直至stop操作為真,則可判斷沒有新的抽象狀態產生,迭代結束。

下面介紹CPA的形式化體系的表示方法和相應的CPA迭代算法。

31CPA形式化體系

CPA形式化定義為ID=(D,∽,merge,stop), 其中包括抽象域D,抽象狀態遷移關系∽,合并操作merge,終止判斷操作stop。 CPA通過配置這四部分來完成一次靜態分析的分析階段,通過選擇不同的配置來實現不同精度和效率的靜態分析。下面具體說明這四部分

(1)抽象域D=(C,ε,[·]),其中C為程序具體狀態的集合,其中一個具體狀態c為程序運行到某一狀態時變量在不同程序結點處的實際值,即X∪{Pc},其中X為變量集合,{Pc}為程序結點集合。ε是用于描述抽象環境的完備格ε=(E,,∩,∪,⊥,T),其中E是抽象狀態集合,E×E是抽象狀態間的偏序關系,∩表示最大下界,∪表示最小上界,⊥∈E表示集合中的最小元素,T∈E 表示集合中的最大元素。具體化方法[·]:E→2c賦予抽象狀態其對應的具體狀態集,即一個抽象狀態可能對應多個具體狀態。為了保證分析可靠性(soundness),我們要求[T]=C,[⊥]=;e,e′∈E,[e∪e′][e]∪[e′]。

(2)抽象狀態遷移∽E×G×E其中E是抽象狀態集合,G是控制流圖的邊的集合。∽表示一個抽象狀態e通過一個CFG的邊g到達一個新的抽象狀態e′記為e∽e′。為了保證分析過程的可靠性,我們要求e∈E:e′∈E:e∽e′,e∈E,g∈G:Uegete′[e′]UC∈[e]{C′|CgC′}。

(3)合并操作符merge:E×E→E將兩個抽象狀態的信息進行合并。為了保證分析的可靠性,我們要求

e′merge(e,e′)。

(4)終止判斷操作stop:E×2E→B表示某一個抽象狀態是否被一個抽象狀態集合所覆蓋,為了保證分析的可靠性,我們要求

stop(e,R)=true→[e]∪e′∈R[e′]。

32CPA迭代算法

CPA的迭代算法是可達性計算算法。其輸入為一組配置完成的CPAID=(D,∽,merge,stop),以及一個初始抽象狀態e0∈E,其中E是抽象域D中的抽象狀態的集合。CPA執行算法不斷更新兩個存放抽象狀態的集合。一個是reached集合,用來存放所有可以到達的抽象狀態。一個是waitlist集合,用來存放所有還未被執行過的抽象狀態。對于某一狀態e,根據抽象狀態遷移關系∽可以找到其對應的一個或多個后繼結點,對于任意后繼結點e′,用其與目前reached集合中所有的抽象狀態進行merge操作。然后判斷是否有新的結點產生,即是否沒有被reached集合中所有抽象狀態所覆蓋。如果產生新的抽象狀態,則將其加入reached集合和waitlist集合中。重復執行算法,直至所有的抽象狀態進行merge操作后都無法找到新的結點,即此時找到的程序的不動點。具體的執行算法流程詳見表1。

4程序運行時錯誤的驗證方法

圖2給出了一個基于CPA的抽象解釋方法的分析框架,用于對程序的運行時錯誤進行分析和驗證。該過程主要分為三個階段:預處理階段、分析階段和驗證階段。

在預處理階段。由于抽象解釋方法是一個基于狀態遷移系統的分析方法,因此需要在預處理階段,將待分析系統轉化成與之等價的抽象表示,即通過詞法分析和語法分析器得到其抽象語法樹,然后轉化成便于進行分析的狀態遷移系統。之后,我們將狀態遷移系統轉化到程序控制流圖(control-flow graph,CFG)[12]。

分析階段是抽象解釋理論表現的主要階段。在這個階段,CPA靜態分析框架需要以程序控制流圖、抽象域的域元素、配置的merge操作和配置的stop操作為輸入。其中程序控制流圖由預處理階段生成。其中抽象域中的域元素以完備格的形式提供輸入,在相應的域操作中提取merge操作和stop操作,以完成CPA形式化體系的輸入。相應的CPA迭代算法運用抽象解釋中的迭代策略,計算程序控制流圖中所有結點的不動點抽象值,從而完成分析。

在驗證階段,將得到的程序結點上的不動點抽象值轉化為程序具體的變量約束關系,根據系統的需求文檔和設計說明文檔對程序的變量數值性質進行分析,判斷變量的數值性質是否滿足規約,得到分析結果,從而完成整個抽象解釋靜態分析的過程。圖3以除零錯為例,說明如何對運行時錯誤進行驗證。根據分析階段得到的不動點抽象值,結合源程序中與除數變量相關的代碼,得到變量的約束關系,然后判斷在各個程序結點,是否存在除數為零的情況,完成分析驗證。

4CPA的分析實例

本章用一個實例來說明如何使用可配置程序分析CPA來對基于抽象解釋的靜態分析的分析階段進行建模。以圖4中代碼為例,使用區間抽象域進行分析,以期得到各個程序結點處變量的取值范圍。

根據第四章分析框架,首先在預處理階段,根據相關詞法分析和語法分析,將源程序轉化到其控制流圖,轉化結果如圖5所示。

在分析階段,根據程序控制流圖和抽象域的定義,配置CPAID=(D,∽,merge,stop),即分別配置抽象域D,抽象狀態遷移關系∽,抽象狀態的合并操作merge,終止判斷操作stop。下面給出具體過程:

(1)配置抽象域D=(C,ε,[·])為區間抽象域。其中C為程序具體狀態的集合C{pc,x},其中pc∈{s1,s2,…,s11},X={x,y};描述抽象環境的完備格

ε=(E,,∩,∪,⊥,T),其中E是抽象狀態集合,具體狀態和抽象狀態通過一個Galois連接彼此關聯

(R,≤)αγ(Itvs,)

其中R是實數域,Itvs是實數域上的區間集合。例如程序具體狀態c(pc=s3,{x=0,y=0})轉化成的抽象狀態是e(pc=s3,{x∈[0,0],y∈[0,0]})。

(2)抽象狀態遷移關系∽,一個抽象狀態通過圖2程序控制流圖上連通的一邊到達一個新的狀態。例如抽象狀態e(pc=c,i∈[1,1])通過邊(pc=c,i=i+1,pc′=d)到達抽象狀態e′(pc=d,i∈[2,2]);抽象狀態e(pc=c,i∈[1,11]通過邊(pc=b,assume(i<=10),pc′=c)到達抽象狀態e′(pc=c,i∈[1,10])。以此類推來遍歷尋找所有可能達到的抽象狀態。

(3)合并操作符merge用以表示兩個抽象狀態的合并,在經典區間抽象域的抽象解釋中,表示兩個區間抽象域的合并,即mergejoin(e,e′)=e∪e′。

兩個區間的合并如下:

例如抽象狀態e(pc=s3,{x∈[0,0],y∈[0,0]})與抽象狀態

e′(pc=s3,{x∈[1,1],y∈[1,1]})進行merge操作形成新的新的抽象狀態

e″(pc=s3,{x∈[0,1],y∈[0,1]})。

(4)終止判斷操作stop用以判斷某一個抽象狀態是否被一個抽象狀態集合所覆蓋,在區間抽象域的抽象解釋中表示是否產生了之前所達到的抽象狀態集合沒有覆蓋到的抽象狀態,即程序是否到達了不動點,如果經過所有的遷移關系,都沒有新抽象狀態的產生,則整個抽象解釋的分析就到達不動點。其配置為

stopjoin(e,R)=e∪e′∈Re′。

在完成配置CPA之后,執行CPA迭代算法。算法輸入ID=(D,∽,merge,stop),初始狀態

e0=(pc=s1,{x=⊥,y=⊥}),經過表1的CPA的迭代算法之后,各個程序結點處的不動點抽象值如表2所示:

根據算法結果,得到變量x和變量y在全部程序結點處的取值范圍,可以對一些變量數值相關的運行時錯誤進行分析和驗證。證明了該分析方法的有效性和可行性。

5結束語

針對程序中的運行時錯誤,本文提出了一種基于CPA的抽象解釋的分析方法。首先介紹了一種支持抽象解釋的靜態分析框架,即可配置程序分析;然后給出了具體的靜態分析流程,如何從源程序出發,轉化成與之等價的控制流圖,再轉化到CPA形式化體系中進行迭代計算,最后根據得到的不動點抽象值進行相關運行時錯誤的分析驗證;最后給出一個實例的分析過程,說明該靜態分析方法的可行性和有效性。

接下來的工作中,我們將進一步擴展CPA支持的抽象域,如八邊形抽象域、多面體抽象域,甚至一些非凸抽象域。并給出一個自動化的對運行時錯誤進行分析和驗證的工具,來對研究工作進行完善。

參考文獻

[1]黃志球,徐丙鳳,闞雙龍,等.嵌入式機載軟件安全性分析標準、方法及工具研究綜述[J].軟件學報,2014,25(2):200-218.

[2]DELMAS D,SOUYRIS J.Astrée:from research to industry[C]//International Static Analysis Symposium.Springer Berlin Heidelberg,2007:437-451.

[3]計算機科學技術百科全書 :選編本[M].北京:清華大學出版社,2002.

[4]CLARK E M,GRUMBERG O,PELED D.Model checking[M].MIT press,1999.

[5]L Hai,S Jigui,Z Yimin.Theorem Proving Based on the Extension Rule.[J].Journal of Automated Reasoning,2003,31(1):11-21.

[6]COUSOT P,COUSOT R.Basic concepts of abstract interpretation[M]//Building the Information Society.Springer US,2004:359-366.

[7]BEYER D,HENZINGER T A,Théoduloz G.Configurable Software Verification:Concretizing the Convergence of Model Checking and Program Analysis[C]// International Conference on Computer Aided Verification.2007:504-518.

[8]COUSOT P,COUSOT R.Abstract Interpretation:A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints.[C]// ACM SigactSigplan Symposium on Principles of Programming Languages.1977:238-252.

[9]COUSOT P,COUSOT R,Feret J,et al.The ASTRE Analyzer[J].Lecture Notes in Computer Science,2005,3444:140-140.

[10]COUSOT P,COUSOT R.Comparing the Galois connection and widening/narrowing approaches to abstract interpretation[C]// Programming Language Implementation and Logic Programming,International Symposium,Plilp92,Leuven,Belgium,August 26-28,1992,Proceedings.1992:269-295.

[11]COUSOT P,COUSOT R.Static determination of dynamic properties of programs[J].Proceedings of the Second International Symposium on Programming,1976.

[12]HARROLD M J,MALLOY B,ROTHERMEL G.Efficient Construction of Program Dependence Graphs[J].Acm Sigsoft Software Engineering Notes,2000,18(3):160-170.

主站蜘蛛池模板: 亚卅精品无码久久毛片乌克兰| 国产特一级毛片| 国产乱子伦手机在线| 一本大道无码日韩精品影视 | 激情六月丁香婷婷| 国产精品久久久久婷婷五月| 免费无码网站| 国产爽歪歪免费视频在线观看| 97se亚洲综合| 国产精品美女自慰喷水| 久久国语对白| 22sihu国产精品视频影视资讯| 97在线国产视频| 一区二区三区成人| 国产美女精品在线| 国产中文一区二区苍井空| 潮喷在线无码白浆| 婷婷色中文| 精品黑人一区二区三区| 国产激爽大片高清在线观看| 久久公开视频| 久久男人视频| 久久精品人妻中文系列| 亚洲欧美天堂网| 国产精品福利一区二区久久| 亚洲最大福利网站| Aⅴ无码专区在线观看| a亚洲视频| 亚洲最新在线| 国产欧美视频综合二区| 园内精品自拍视频在线播放| 小说 亚洲 无码 精品| 波多野一区| 精品国产欧美精品v| 亚洲一区色| 成人一区在线| 怡红院美国分院一区二区| 国产精品久久久久久久久久久久| 日韩精品少妇无码受不了| 欧美午夜在线观看| 亚洲AV永久无码精品古装片| 欧美精品成人| 亚洲av中文无码乱人伦在线r| 日本不卡在线播放| 日韩小视频在线观看| 亚洲性一区| 国产在线观看人成激情视频| 精品免费在线视频| 亚洲精品男人天堂| 亚洲AV无码久久天堂| 一级一毛片a级毛片| 高清无码一本到东京热| 一级片一区| 亚洲 欧美 偷自乱 图片| 妇女自拍偷自拍亚洲精品| 欧美一级在线看| 久久久亚洲色| 老司国产精品视频91| 国产在线精品网址你懂的| 无码国内精品人妻少妇蜜桃视频| 色综合天天操| 亚洲浓毛av| 亚洲天堂高清| 亚洲精品在线观看91| 色婷婷狠狠干| 亚洲国产精品无码AV| 国产SUV精品一区二区6| 国产成人精品视频一区二区电影 | 秋霞国产在线| 午夜福利视频一区| 欧美成人手机在线观看网址| 日韩精品久久无码中文字幕色欲| 在线观看欧美国产| 天堂在线视频精品| 免费毛片视频| 亚洲中文字幕精品| 国产 日韩 欧美 第二页| 成人免费网站久久久| 国产97视频在线观看| 五月天久久综合国产一区二区| 国产无码制服丝袜| 国产国模一区二区三区四区|