• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于CEGAR的C程序空指針解引用檢測

    2016-04-28 08:56:49段振華
    計算機(jī)研究與發(fā)展 2016年1期

    段 釗 田 聰 段振華

    (西安電子科技大學(xué)計算機(jī)理論與技術(shù)研究所 西安 710071)

    (ctian@mail.xidian.edu.cn)

    ?

    基于CEGAR的C程序空指針解引用檢測

    段釗田聰段振華

    (西安電子科技大學(xué)計算機(jī)理論與技術(shù)研究所西安710071)

    (ctian@mail.xidian.edu.cn)

    CEGAR Based Null-Pointer Dereference Checking in C Programs

    Duan Zhao, Tian Cong, and Duan Zhenhua

    (InstituteofComputingTheoryandTechnology,XidianUniversity,Xi’an710071)

    AbstractWith the rapid growth of computer software in both scale and complexity, more and more attention has been paid by software developers on the reliability and security issue. Null-pointer dereference is a kind of errors which often occur in programs.This paper proposes a CEGAR based null-pointer dereference verification approach for C programs. With this method, first, a linear temporal logic (LTL) formula is used to specify the null-pointer dereference problem. Then whether null-pointer dereference occuring in a program is checked by a CEGAR based model checking approach. In order to verify null-pointer dereference problem in a total automatic way, this paper also studies how to generate temporal logic formulas automatically with respective to null-pointer dereference problem. Experimental results show that the proposed approach is useful in practice for checking null-pointer dereference in C programs with large scale.

    Key wordsmodel checking; abstraction refinement; null-pointer dereference; program verification; temporal logic

    摘要隨著計算機(jī)軟件規(guī)模和復(fù)雜度的日益增長,軟件系統(tǒng)的可靠性和安全性倍受關(guān)注.空指針解引用是程序中常見的一類錯誤.提出了一種基于反例制導(dǎo)抽象精化CEGAR的C程序空指針解引用檢測方法.該方法首先使用線性時序邏輯描述空指針解引用問題,然后通過抽象精化的方法檢測待測程序中是否含有空指針解引用錯誤.為了達(dá)到完全自動驗(yàn)證的目標(biāo),同時針對空指針解引用問題,研究了該類性質(zhì)的時序邏輯表達(dá)方法,并自動從程序中針對所有的指針變量,形成相應(yīng)的時序邏輯公式.實(shí)驗(yàn)結(jié)果表明,所提出的方法在大規(guī)模C程序的空指針解引用檢測方面有著重要的實(shí)際應(yīng)用價值.

    關(guān)鍵詞模型檢測;抽象精化;空指針解引用;程序驗(yàn)證;時序邏輯

    計算機(jī)軟件已深入到國防建設(shè)和國計民生的各個領(lǐng)域,如航天航空、工業(yè)控制、交通、醫(yī)療、教育和社交等,成為當(dāng)今社會不可或缺的一部分.面對多樣化的需求,軟件的規(guī)模和復(fù)雜性不斷增大,因而軟件的可靠性和安全性更加難以得到保障.目前,大部分軟件系統(tǒng)都存在各種各樣的錯誤和缺陷.有的軟件雖然可以正常運(yùn)行,但是其內(nèi)部仍然存在許多錯誤隱患,在特定情況下會導(dǎo)致軟件性能下降,甚至引起程序崩潰,從而造成巨大的損失.為了提高軟件的可信性,研究人員提出大量的技術(shù)來檢測和預(yù)防軟件中的錯誤和缺陷.

    C程序中指針的使用十分廣泛,而且語法靈活,但易錯.由于指針而引發(fā)的內(nèi)存錯誤往往難以追蹤和分析,空指針解引用是其中常見的錯誤之一.如果一個指針表達(dá)式指向NULL,或者未被初始化,或者指向一個已被釋放的內(nèi)存,那么,使用該表達(dá)式的解引用就會導(dǎo)致系統(tǒng)崩潰或者得到錯誤的數(shù)據(jù).

    許多查找軟件錯誤的技術(shù)被提出.其中,靜態(tài)分析是在不執(zhí)行程序的情況下通過直接分析源程序來檢查程序中的錯誤,主要包括路徑敏感不敏感分析方法[1]和流敏感不敏感分析方法[2-3]等.程序測試[4-5]是對程序的每一個模塊在使用前進(jìn)行測試,保證該模塊的正確性.定理證明[6]將待測問題轉(zhuǎn)化為可滿足性問題,通過判斷命題邏輯公式的可滿足性來檢測程序中是否存在錯誤.模型檢測[7-8]主要是把待檢測程序描述為狀態(tài)遷移系統(tǒng),把待檢測的問題用時序邏輯公式表示出來,然后檢測狀態(tài)遷移系統(tǒng)是否滿足性質(zhì).近年來,許多研究將模型檢測、定理證明和靜態(tài)分析等技術(shù)相結(jié)合,利用各種方法的優(yōu)勢來檢測程序中的錯誤.

    在空指針解引用方面,Dirk等人開發(fā)的自動驗(yàn)證工具BLAST[9-11],可以驗(yàn)證C程序中的安全性質(zhì).Dirk等人將他們的方法進(jìn)行了擴(kuò)展,開發(fā)了新的工具CPAChecker[12-13].但是使用BLAST和CPAChecker檢測程序中的空指針解引用需要預(yù)先在程序中插樁,如何完全自動地插樁是一個有待解決的實(shí)際問題.CMBC[14]是Edmund等人開發(fā)的一種限界模型檢測工具.Charatonik等學(xué)者在此工具的基礎(chǔ)上,通過限界的思想來檢測程序中是否存在空指針解引用問題[15].另外,還有一些研究針對并行程序中空指針解引用問題[16].在國內(nèi),也有一些學(xué)者從事這方面的研究,如文獻(xiàn)[17]給出了一種檢測C程序中基于區(qū)域內(nèi)存模型的空指針解引用錯誤的方法.

    總之,現(xiàn)有的程序模型檢測方法和工具很多,它們主要是通過對源程序進(jìn)行插樁,然后再分析插樁后的程序.CBMC和BLAST支持對程序的自動插樁;但是,它們是對程序中每個指針的每一次解引用都進(jìn)行插樁,因而會大大增加源程序的代碼量.CPAChecker則需要手動地進(jìn)行插樁,如果給每個位置插樁,同樣會增加代碼量.

    本文提出了一種基于反例制導(dǎo)抽象精化(counter example-guided abstraction refinement, CEGAR)[18]的C程序空指針解引用檢測方法.該方法首先使用線性時序邏輯(linear temporal logic, LTL)描述空指針解引用問題,然后通過抽象精化的方法檢測待測程序中是否含有空指針解引用錯誤.為了達(dá)到完全自動驗(yàn)證的目標(biāo),本文同時針對空指針解引用問題,研究了該類性質(zhì)的時序邏輯表達(dá)方法,并自動從程序中針對所有的指針變量形成相應(yīng)的時序邏輯公式.實(shí)驗(yàn)結(jié)果表明,該方法可以自動地對程序中的所有指針進(jìn)行檢測,錯誤覆蓋率高,對大規(guī)模程序的檢測有著很好的實(shí)際應(yīng)用價值.

    1空指針解引用問題的LTL描述

    1.1LTL

    模型檢測中,一般使用時序邏輯公式描述待驗(yàn)證的性質(zhì).本文使用LTL來描述空指針解引用問題.

    設(shè)AP是原子命題集合,LTL公式是由AP中的元素和操作符組成.其中,操作符包括邏輯非()、邏輯與(∧)、next(○)、until(∪)和release(R).LTL的語法定義如下:

    φ∷=p|ψ|φ∧ψ|○ψ|φ∪ψ|φRψ,p∈AP.

    LTL公式的語義解釋在線性結(jié)構(gòu)上.一個線性結(jié)構(gòu)是一個無限序列x=x(0),x(1),….其中,x(i)是AP到{true, false}的映射.一個LTL公式φ在線性結(jié)構(gòu)x的第i個位置滿足一個線性結(jié)構(gòu)x,記作:x,i?φ.語義定義如下:

    x,i?p,如果x(i)(p)=true,p∈AP;

    x,i?ψ,如果x,i?ψ;

    x,i?φ∨ψ,如果x,i?φ或x,i?ψ;

    x,i?○φ,如果x,i+1?φ;

    x,i?φ∪ψ,如果存在j≥i,使得對于任意的

    i′∈{i,i+1,…,j-1},x,i′?φ,并且x,j?ψ;

    x,i?φRψ,如果對所有的j≥i,x,j?ψ,

    或者存在j≥i,使得對于任意的

    i′∈{i,i+1,…,j-1},x,i′?ψ,并且x,j?φ.

    其它附加的邏輯操作符定義如下:

    另外,時序操作符sometimes(◇)和always(□)的定義如下:

    LTL公式可以表示為范式.對于一個LTL公式φ,它的范式定義為

    其中,βi是狀態(tài)公式,即只包含邏輯操作符的公式;φi是一個任意的主操作符不為析取操作的LTL公式.在范式中,每一個析取項都代表一個遷移關(guān)系.直觀地講,范式表示存在一個整數(shù)i,βi在當(dāng)前狀態(tài)可滿足,φi在下一狀態(tài)可滿足.已證明,所有的LTL公式都可以等價地轉(zhuǎn)化為它的范式[19].

    1.2LTL到TGBA的轉(zhuǎn)換

    任何一個LTL公式可以被等價地轉(zhuǎn)換為一個基于遷移的廣義Büchi自動機(jī)(transition based generalized Büchi automata, TGBA)[20].為了構(gòu)造LTL公式φ的TGBA,首先創(chuàng)建初始狀態(tài)[φ],然后將φ轉(zhuǎn)換為范式.假設(shè):

    φ≡(p∧r∧p∧r)∧○(φ1∧φ2)∨

    p∧r∧○φ3∨p∧r∧○(φ4∧φ5),

    那么可以生成3個新結(jié)點(diǎn),即[φ1∧φ2],[φ3]和[φ4∧φ5],如圖1所示:

    Fig. 1 Constructing TGBA.圖1 構(gòu)造TGBA

    同時,生成遷移關(guān)系為

    為了完成整個TGBA的構(gòu)造,需要針對每個新生成的結(jié)點(diǎn),通過將表示該結(jié)點(diǎn)的公式轉(zhuǎn)換成范式,從而不斷地產(chǎn)生新的結(jié)點(diǎn),直到?jīng)]有新的結(jié)點(diǎn)可以被生成.這樣的一個圖我們稱為φ的范式圖.

    在此過程中,必須考慮一個問題:對于形如p∪q的公式,q最終要發(fā)生,即q不能被無限地延遲.但是,在范式圖中沒有顯式地體現(xiàn)出q有沒有發(fā)生.

    因此,為了準(zhǔn)確地刻畫∪操作的語義,本文進(jìn)一步在范式圖的邊上增加Flag集合標(biāo)記.我們關(guān)注公式中不同的∪操作.對于每一個主操作符為∪的子式,使用一個唯一整數(shù)下標(biāo)i來區(qū)分,這里i>0.這樣,第i個∪操作,記為∪i.一個LTL公式的范式圖中,一個狀態(tài)[φ]中的所有主操作符為∪的子式所對應(yīng)的下標(biāo)構(gòu)成的整數(shù)集合稱為Untilφ.整個范式圖中,所有主操作符為∪的子式所對應(yīng)的下標(biāo)構(gòu)成的整數(shù)集合稱為AllUntil.據(jù)此,指向狀態(tài)[φ]的遷移上的標(biāo)記為Flag=AllUntilUntilφ.

    對于一個LTL公式φ=p∪(q∪r),它對應(yīng)的TGBA如圖2所示,在圖2中“{}”是每一個狀態(tài)所包含的主操作符為∪的子式的整數(shù)標(biāo)記集合,“[]”是每一條遷移上的Flag集合.

    Fig. 2 TGBA of the formula φ.圖2 公式φ的TGBA.

    從圖2可以看出,“q∪r”,記為φ中的主操作符∪,被標(biāo)記為4;“p∪(q∪r)”,記為φ1中的主操作符∪,被標(biāo)記為5;“true”,記為φ2,不包含∪.所以,整個TGBA的AllUntil集合為{4,5},Untilφ為{4},Untilφ1為{5},Untilφ2為{}.

    范式圖以及Flag標(biāo)記構(gòu)成了與給定LTL公式等價的TGBA.TGBA上一個無窮路徑是指從初始結(jié)點(diǎn)出發(fā)的一個結(jié)點(diǎn)與邊相交互的無窮序列,π=n0,e0,n1,e1,…,(ni,ei,…,nj,ej)ω,0≤i≤j.為了方便,我們用infn(π)表示π的循環(huán)部分的結(jié)點(diǎn)集合,infe(π)表示循環(huán)部分的邊集合.一個路徑π是可接收的,當(dāng)且僅當(dāng):

    AllUntil={Flag(e)|e∈infe(e)}.

    1.3空指針解引用的LTL描述

    空指針解引用問題指:當(dāng)程序中使用某個指針變量的解引用形式時,該指針變量為空.在該情況下會導(dǎo)致程序出錯甚至崩潰.為了使用LTL公式表示空指針解引用問題,我們首先定義2個命題:

    命題1.d:表示指針p≠null.d為真當(dāng)且僅當(dāng)在當(dāng)前狀態(tài)下指針變量p≠null.

    命題2.r:表示使用了指針p的解引用形式,即*p或p→.r為真當(dāng)且僅當(dāng)當(dāng)前狀態(tài)使用了指針的解引用形式.

    因此,指針變量p的空指針解引用可以描述為:程序中某一時刻p=null且出現(xiàn)了對p的解引用形式.在模型檢測中,一般描述期望的性質(zhì):即該程序中不存在空指針解引用.該期望的性質(zhì)用LTL公式描述為□(r→d).

    為了檢測待測程序是否滿足性質(zhì)□(r→d),理論上我們需要將□(r→d)的否定,即(□(r→d))轉(zhuǎn)換為TGBA;然后檢測程序中是否存在可能的執(zhí)行路徑與所得到的TGBA的接收路徑相吻合.

    Fig. 3 TGBA of formula true∪(d∧ r).圖3 公式true∪(d∧ r)的TGBA

    TransitionpredecessoredgesuccessorFlagtrue∪(d∧r)d∧rtrue{1}true∪(d∧r)truetrue∪(d∧r){}truetruetrue{1}

    2空指針解引用性質(zhì)的LTL公式生成

    如1.3節(jié)所述,程序中不存在空指針解引用的性質(zhì)可以通過LTL公式□(r→d)來描述.因此,我們可以看出,對于不同的指針變量公式是不變的.但是命題d和r的具體定義不同,它們要對應(yīng)具體的指針變量.因此,基于這種模式,本節(jié)給出了針對任意指針變量的LTL公式形式方法.

    在程序中,指針變量的定義存在2種情況:1) 聲明語句,可以以全局或局部變量的形式出現(xiàn);2) 函數(shù)的形參,出現(xiàn)在函數(shù)的定義中.為了對所有的指針變量形成相應(yīng)的LTL公式,我們首先通過分析程序的語法樹,提取所有的指針變量,并記錄相關(guān)的變量名稱、類型和作用域(通過所在函數(shù)的名稱來體現(xiàn),其中全局變量略去函數(shù)名稱);然后針對不同的指針變量,例如變量v,定義命題d和r:

    具體的指針變量的提取算法如算法1所示:

    算法1. 指針變量的提取.

    輸入:控制流自動機(jī)cfa、保存變量信息的集合varInfo、保存函數(shù)信息的集合funcInfo、保存類型信息的集合typeInfo;

    輸出:varInfo.

    ① fornodeincfado*對cfa中每一個結(jié)點(diǎn)*

    ② ifnode是函數(shù)入口結(jié)點(diǎn)then*提取函

    ③paras=extractFuncInfo(node,

    funcInfo);

    ④ forparainparasdo

    ⑤ ifpara是一個指針變量then

    ⑥extractVarInfo(para,varInfo);

    ⑦ end if

    ⑧ end for

    ⑨ end if

    ⑩edges=getLeavingEdges(node);

    在算法1中,為了方便分析,提取指針變量時,同時記錄了所在函數(shù)和復(fù)雜類型的信息.在得到所有變量信息后,可以任意選擇一個變量,生成對應(yīng)的LTL公式進(jìn)行檢測,也可以選擇對所有變量自動地逐個形成公式并檢測.

    3基于CEGAR的空指針解引用模型檢測

    本節(jié)首先描述了模型檢測中使用的2種數(shù)據(jù)結(jié)構(gòu):控制流自動機(jī)(control flow antomata, CFA)和抽象可達(dá)圖(abstract reachability graph, ARG);然后,詳細(xì)地介紹了基于CEGAR的空指針解引用模型檢測方法.

    3.1CFA和ARG

    CFA是一個有向圖.其中,結(jié)點(diǎn)代表程序的位置,通過一個程序計數(shù)器的值來編號;邊表示的是連接2個結(jié)點(diǎn)的操作,對應(yīng)C程序的語句,包括賦值操作、分支語句、函數(shù)調(diào)用和return語句等.

    一個程序的CFA可以定義為一個四元組A={L,O,lentry,lexit},其中,L是程序位置的集合;O?L×ops×L是控制流邊的結(jié)合,表示控制流2個相鄰結(jié)點(diǎn)之間執(zhí)行的操作;lentry∈L是程序的起始位置;lexit∈L是程序的終止位置.

    對于CFA中的一個程序位置l∈L,l的前驅(qū)集合定義為Pre(l)={l′|(l′,ops,l)∈O},l的后繼集合定義為Succ(l)={l′|(l,ops,l′)∈O}.以下面代碼為例,它的CFA如圖4所示.

    ① void main(){

    ② inti;

    ③ int*p;

    ④ ifi<2

    ⑤p=&i;

    ⑥ end if

    ⑦*p=1;

    ⑧ }

    Fig. 4 CFA.圖4 控制流自動機(jī)

    ARG是在考慮CFA中每個位置的謂詞真值的情況下,通過展開CFA而得到的.它表示的是程序可達(dá)的狀態(tài)空間.

    給定一個程序的控制流圖A={L,O,lentry,lexit}和相關(guān)的謂詞集合Pred.該程序的ARG為一個四元組G={N,E,Ninit,Nf}.其中,N是結(jié)點(diǎn)集合,對于任意的n∈N,n=(l,Pred(l)),l∈L,Pred:L→2Pred稱為可達(dá)域,表示位置l與Pred的映射關(guān)系;E?N×ops×N是控制流邊的子集;Ninit和Nf是初始結(jié)點(diǎn)集合和終止結(jié)點(diǎn)集合.

    為了方便,對于一個結(jié)點(diǎn)n=(l,Pred(l))∈N,我們用n.l表示l;用n.r表示Pred(l).如果n∈Ninit(Nf),則n.l=lentry(lexit).

    實(shí)際上,ARG是程序的抽象模型,其中一條路徑對應(yīng)于程序的一次執(zhí)行.一個結(jié)點(diǎn)n的可達(dá)域(n.r)表示假設(shè)程序沿著一個操作序列執(zhí)行,從起始結(jié)點(diǎn)到結(jié)點(diǎn)n得到的可達(dá)狀態(tài)的近似集合.因此,考慮的謂詞越少,ARG就越小,驗(yàn)證的效率越高.一個CFA可以看成一個特殊的ARG,其中,所有結(jié)點(diǎn)的可達(dá)域都為空.但是在ARG中,一條不滿足期望性質(zhì)的路徑可能在實(shí)際程序中不存在.然而,基于CEGAR的懶惰抽象(lazy abstraction)[21]方法可以通過插值得到更多的謂詞,從而有效地消除虛假反例.

    3.2基于CEGAR的C程序空指針解引用檢測

    Fig. 5 Framework of CEGAR based model checking.圖5 基于CEGAR的模型檢測整體框架

    基于CEGAR的C程序空指針解引用模型檢測的整體框架如圖5所示.1)使用LTL公式P描述期望的性質(zhì),即程序中不存在空指針解引用問題;2)檢測程序是否可以滿足P的否定.如果可以滿足,那么程序中存在可能的執(zhí)行路徑與期望的性質(zhì)相違背,否則程序滿足期望的性質(zhì).程序的狀態(tài)空間往往非常大,甚至無窮大,因此,本文使用謂詞抽象的方法得到程序的一個抽象模型.在初始的抽象模型中,僅關(guān)心與性質(zhì)P相關(guān)的所有謂詞.如圖5所示,通過抽象我們從待測程序Pro得到它的抽象模型M′;然后檢測M′是否可以滿足性質(zhì)的否定,即P.若M′的所有路徑都不能滿足P,可以給出結(jié)論:程序Pro中沒有空指針解引用發(fā)生;反之,如果在M′中找到一條路徑可以滿足P,需要進(jìn)一步檢測該路徑的真實(shí)性,即該路徑是否在源程序中存在.若該路徑是真實(shí)存在的路徑,那么我們找到了程序中的一個空指針解引用錯誤;否則,如果該路徑是虛假的,需要進(jìn)一步通過添加新的謂詞來對M′進(jìn)行細(xì)化.重復(fù)以上過程,直到發(fā)現(xiàn)一個錯誤,或者證明程序中沒有錯誤為止.在CPAChecker的CEGAR算法中,細(xì)化操作是通過調(diào)用SMT求解器來完成的,它將一條反例路徑轉(zhuǎn)化為SMT求解器可處理的公式序列,然后通過求解器來求解.新的謂詞是通過Craig差值[22]算法得到的.

    本文的算法是在現(xiàn)有的軟件模型檢測工具CPAChecker的基礎(chǔ)上實(shí)現(xiàn).CPAChecker自身不能支持時序邏輯性質(zhì)的檢測,它需要首先在程序中對待檢測的問題進(jìn)行插樁,然后使用上述CEGAR循環(huán)進(jìn)行檢測.通過插樁的方式,只需要對能到達(dá)插樁的位置的路徑進(jìn)行檢測,從這個角度看,插樁的方法隱式地縮小檢測范圍,在一定程度上對檢測路徑進(jìn)行了篩選,而且,如果程序中有錯誤,那么錯誤肯定在插樁的位置,方便定位錯誤.CEGAR算法檢測流程圖如圖6所示.在圖6中,首先讀入插樁后的C程序,并生成程序的CFA;然后根據(jù)插樁信息,展開CFA,提取謂詞,生成ARG.如果錯誤標(biāo)簽不可達(dá),即不存在反例路徑(counterexample, CE),說明程序安全;否則需判斷反例路徑是否虛假.如果反例路徑是虛假的,說明考慮的謂詞太少,需要提取新的謂詞進(jìn)一步細(xì)化,然后繼續(xù)檢測;如果反例路徑不是虛假的,則說明程序不安全,輸出反例路徑.

    Fig. 6 Flow diagram of the CEGAR algorithm in CPAChecker.圖6 CPAChecker中CEGAR算法的流程圖

    3.3on-the-fly檢測

    為了緩解驗(yàn)證過程中的狀態(tài)空間,本文結(jié)合CFA和LTL性質(zhì),采用on-the-fly的方式逐步生成ARG,同時對性質(zhì)進(jìn)行檢測.

    算法2.LTLModelCheck(M,V).

    輸入:帶驗(yàn)證的程序M、待檢測的指針變量V;

    輸出:true或false.

    ①target=null,success=false;

    ②M→cfa;*生成CFA*

    ③AP=generate(V),P=Property(AP);

    ④S0=initARGState(cfa,AP,P);*初始狀態(tài)*

    ⑤reached={S0};*可達(dá)狀態(tài)集合*

    ⑥waitlist={S0};*一個棧,存放未處理的狀態(tài)*

    ⑦AllUntil=LTL2NF(P);

    ⑧ do{

    ⑨t(yī)arget=generateARG(cfa,reached,

    waitlist,AllUntil);

    ⑩ iftarget!=null then

    算法3.generateARG(cfa,reached,waitlist,AllUntil).

    輸入:控制流自動機(jī)cfa、可達(dá)狀態(tài)集合reached、用來存放未處理狀態(tài)的一個棧waitlist、待驗(yàn)證性質(zhì)對應(yīng)的AlLUntil集合AllUntil;

    輸出:1個ARGState.

    ① whilewaitlist!=null do

    ②s=getTopWaitlist(),p=P(s);

    ③TR=nextStateNF(s,p);

    ④ ifTR=null then goto ③;

    ⑤ forT′ inTRdo

    ⑥sucs=computeSucs(s,cfa) ;*后繼狀

    ⑦ ifsucs==null then

    ⑧ ifexistCE(reached,s,AllUntil) then

    ⑨ returns;

    ⑩ end if

    then

    在算法3中,語句p=P(s)計算狀態(tài)s的性質(zhì)集合;函數(shù)stop判斷后繼狀態(tài)suc是否被覆蓋;函數(shù)getSucProperty計算后繼狀態(tài)滿足的性質(zhì);函數(shù)CP計算后繼狀態(tài)需要滿足的命題;函數(shù)existCE判斷是否存在反例路徑.函數(shù)getSucProperty的計算過程如算法4所示.

    算法4.getSucProperty(S,T).

    輸入:1個ARG狀態(tài)S、性質(zhì)的1條遷移T;

    輸出:S的后繼狀態(tài)滿足的性質(zhì).

    ①M(fèi)=S.getPropositions();*狀態(tài)S滿足的命題集合*

    ②booleanbool=true;

    ④ forminMdo*對M中每一個命題*

    ⑤ ifm∧ε′ !=false then

    ⑥ continue;

    ⑦ else

    ⑧bool=false;

    ⑨ break;

    ⑩ end if

    算法4中,T為遷移關(guān)系,ε′代表的是遷移關(guān)系T的接受條件.如果命題集合M中的每一個命題與ε′的交集都不為空,則說明狀態(tài)S滿足性質(zhì)P′.

    函數(shù)CP的計算方法如下:1) 求出初始狀態(tài)到S的路徑,記作path.2)將path轉(zhuǎn)為SMT能夠接受的形式,記作pathformula.3)得到前驅(qū)狀態(tài)的命題集合pp.4) 對集合pp中的命題d,做如下操作:將命題d轉(zhuǎn)為SMT公式f,加入pathformula,并用SMT求解.如果結(jié)果為true,則說明S狀態(tài)滿足命題d;否則,S狀態(tài)不滿足命題d,即滿足d的否定.對于命題r,則通過分析對應(yīng)的c表達(dá)式來判斷其是否可滿足.

    函數(shù)existCE的計算過程如算法5所示.其中,path為從初始狀態(tài)到達(dá)輸入狀態(tài)E的路徑.反例路徑是根據(jù)path的循環(huán)部分來判斷.

    算法5.existCE(reached,E,AllUntil).

    輸入:可達(dá)狀態(tài)集合reached、一個ARG狀態(tài)E、待驗(yàn)證性質(zhì)對應(yīng)的AlLUntil集合AllUntil;

    輸出:true或false.

    ①path=getPath(reached,E);

    ② foreinpathdo

    ③Flag=getFlag(e);*計算Flag集合*

    ④ foriinFlagdo

    ⑤Fi=Fi∪{e};

    ⑥ end for

    ⑦ end for

    ⑧ foriinAllUntildo

    ⑨ ifFi∧path!=null then

    ⑩ continue;

    4實(shí)驗(yàn)結(jié)果分析

    為了驗(yàn)證本文提出的方法,我們在CPAChecker的基礎(chǔ)上開發(fā)了C程序空指針解引用檢測工具NULPChecker,并通過程序驗(yàn)證Benchmark程序*https:svn.sosy-lab.orgsoftwaresv-benchmarkstagssvcomp14對工具的效果進(jìn)行評估.

    4.1工具實(shí)現(xiàn)

    本文在現(xiàn)有CPAChecker的基礎(chǔ)上,利用謂詞抽象、CEGAR、on-the-fly以及時序邏輯等開發(fā)了C程序空指針解引用檢測工具:NULPChecker.圖7給出了該工具的主要框架.CFA模塊是基于Eclipse平臺的插件,它根據(jù)C程序的語法樹生成程序的CFA,同時,變量提取模塊通過分析CFA提取指針變量.LTL模塊根據(jù)變量提取模塊提取的變量,生成LTL公式,將LTL公式轉(zhuǎn)為與其等價的TGBA,然后和ARG模塊進(jìn)行交互.ARG模塊利用on-the-fly的思想,逐步展開CFA和LTL公式,在展開的同時,檢查CFA當(dāng)前狀態(tài)的命題與公式范式的當(dāng)前狀態(tài)是否沖突.重復(fù)此過程,直到不再產(chǎn)生新的狀態(tài).在沒有沖突出現(xiàn)時產(chǎn)生的一條完整路徑對應(yīng)一條反例路徑,該路徑是否真實(shí)存在還需進(jìn)一步判斷.細(xì)化模塊首先利用SMT求解器判斷反例的真實(shí)性,如果反例路徑是虛假的,則采用插值的方法提取新的謂詞,重復(fù)上述過程直到給出真反例或證明程序正確.輸出模塊輸出程序的驗(yàn)證結(jié)果,驗(yàn)證過程中,可以選擇“單個指針”和“所有指針”.

    Fig. 7 Core of NULPChecker圖7 NULPChecker的中心結(jié)構(gòu)

    我們使用NULPChecker檢測第3節(jié)中的程序中是否存在空指針解引用問題.在檢測過程中,工具提示程序中存在一個指針變量,如圖8所示,我們選擇檢測指針變量p是否存在空指針解引用現(xiàn)象.檢測結(jié)束后,工具提示存在錯誤路徑,如圖9所示.

    Fig. 8 Choosing pointer.圖8 指針選擇

    4.2實(shí)驗(yàn)結(jié)果

    本文通過NULPChecker檢測了程序驗(yàn)證Benchmark程序中的空指針解引用問題,檢測結(jié)果如表2所示.表2中,列1顯示的是測試程序名,列2是程序的行數(shù),列3是程序中指針變量的總數(shù),列4是驗(yàn)證結(jié)果安全的指針變量總數(shù),列5是出現(xiàn)空指針解引用問題的指針變量總數(shù).

    Table 2 Experimental Data

    這里需要指出的是,CPAChecker只支持對加錯誤標(biāo)簽的位置進(jìn)行檢查,因此,要檢查一個指針的所有使用情況,則需要手動地加入很多標(biāo)簽.如果要檢測所有的指針,不能保證能夠準(zhǔn)確地在所有的位置加上合適的標(biāo)簽,而本文的方法無需手動對程序作任何修改.NULPChecker支持對任意C程序中所有空指針解引用的全自動檢測,無需人工干預(yù).

    5結(jié)束語

    本文提出了全自動的基于CEGAR的C程序空指針解引用檢測方法,并開發(fā)了相應(yīng)的支撐工具.本文的貢獻(xiàn)在于指出了程序中常見錯誤的基于LTL的驗(yàn)證模式.本文針對的是C程序中的空指針解引用問題,但是,所提出的方法也可以用來檢測其它問題,如數(shù)組越界、除零問題等,這也是本文的后期研究工作.本文給出的模型檢測算法目前已經(jīng)可以對空指針解引用問題進(jìn)行檢測,但是還存在許多缺陷.如果程序存在循環(huán)結(jié)構(gòu),可能會展開多次,最終系統(tǒng)內(nèi)存不足使程序停止.在分析結(jié)構(gòu)體指針或數(shù)組等涉及內(nèi)存操作的變量時,對變量信息的提取和分析不夠完整,會導(dǎo)致程序誤報或漏報.程序?qū)語言的一些復(fù)雜的語法結(jié)構(gòu)的支持還不夠完善,而且調(diào)用的系統(tǒng)函數(shù)不能識別其作用,也會導(dǎo)致程序分析結(jié)果錯誤.檢查的程序規(guī)模雖然有所提高,但是跟待測程序的設(shè)計結(jié)構(gòu)有很大關(guān)系.有時程序的規(guī)模不是很大,但函數(shù)之間的調(diào)用關(guān)系可能會很復(fù)雜,如出現(xiàn)遞歸調(diào)用或者循環(huán)體的循環(huán)次數(shù)太大而導(dǎo)致程序堆棧和堆不夠用.算法本身會保存很多信息來分析程序,這會占用大量內(nèi)存.這些問題在后續(xù)的研究中都要進(jìn)行分析.

    參考文獻(xiàn)

    [1]Xiao Qing, Gong Yunzhan, Yang Chaohong, et al. Path sensitive static defect detecting method[J]. Journal of Software, 2010, 21(2): 209-217 (in Chinese)(肖慶, 宮云戰(zhàn), 楊朝紅, 等. 一種路徑敏感的靜態(tài)缺陷檢測方法[J]. 軟件學(xué)報, 2010, 21(2): 209-217)

    [2]Shapiro M, Horwitz S. Fast and accurate flow-insensitive points-to analysis[C]Pror of the 24th ACM Symp on Principles of Programming Languages. New York: ACM, 1997: 1-14

    [3]Ben H, Lin C. Semi-sparse flow-sensitive pointer analysis[J]. SIGPLAN Notices, 2009, 44(1): 226-238

    [4]Dalley James L. The art of software testing[C]Proc of National Aerospace and Electronics Conf. Piscataway, NJ: IEEE, 1991: 757-760

    [5]Repasi T. Software testing-state of the art and current research challenges[C]Pror of the 5th Int Symp on Applied Computational Intelligence and Informatics. Piscataway, NJ: IEEE, 2009: 47-50

    [6]Ellis B J, Ireland A. An integration of program analysis and automated theorem proving[C]Proc of the 4th Int Conf on Integrated Formal Methods. Berlin: Springer, 2004: 67-86

    [7]Clarke E M, Grumberg O, Long D E. Model checking and abstraction[J]. ACM Trans on Programming Languages and Systems, 1994, 16(5): 1512-1542

    [8]Jhala R, Rupak M. Software model checking[J]. ACM Computing Surveys, 2009, 41(4): 1-21

    [9]Beyer D, Henzinger T A, Jhala R, et al. The software model checker Blast: Applications to software engineering[J]. International Journal on Software Tools for Technology Transfer, 2007, 9(56): 505-525

    [10]Bayer D, Henzinger T A, Jhala R, et al. Checking memory safety with Blast[C]Pror of the 8th Int Conf on FASE. Berlin: Springer, 2005: 2-18

    [11]Condit J, Harren M, McPeak S, et al. CCURED in the real world[C]Proc of SIGPLAN Notices. New York: ACM, 2003: 232-244

    [12]Beyer D, Keremoglu M E. CPACHECKER: A tool for configurable software verification[C]Proc of the 23rd Int Conf on Computer Aided Verification. Berlin: Springer, 2011: 184-190

    [13]Bayer D, Henzinger T A, Theoduloz G. Configurable software verification: Concretizing the convergence of model checking and program analysis[C]Proc of the 19th Int Conf on Computer Aided Verification. Berlin: Springer, 2007: 504-518

    [14]Clarke E M, Kroening D, Lerda F. A tool for checking ANSI-C programs[C]Proc of the 10th Int Conf on Tools and Algorithms for the Construction and Analysis of Systems. Berlin: Springer, 2004: 168-176

    [15]Charatonik W, Georgieva L, Maier P. Bounded model checking of pointer programs[C]Proc of the 19th Int Workshop on Computer Science Logic. Berlin: Springer, 2005: 397-412

    [16]Frazan A, Madhusudan P, Razavi N, et al. Predicting null-pointer dereferences in concurrent programs[C]Proc of the

    20th ACM SIGSOFT Int Symp on the Foundations of Software Engineering. New York: ACM, 2012: 47-57

    [17]Dong Yukun, Gong Yunzhan, Jin Dahai. Null pointer dereference defect detecting based on region-based memory model[J]. Acta Electronica Sinica, 2014, 42(9): 1744-1752 (in Chinese)(董玉坤, 宮云戰(zhàn), 金大海. 基于區(qū)域內(nèi)存模型的空指針引用缺陷檢測[J]. 電子學(xué)報, 2014, 42(9): 1744-1752)

    [18]Clarke E. Counterexample-guided abstraction refinement[C]Proc of the 10th Int Symp on Temporal Representation and Reasoning and the 4th Int Conf on Temporal Logic. Piscataway, NJ: IEEE, 2003: 154-169

    [19]Tian Cong, Duan Zhenhua. A note on stutter-invariant PLTL[J]. Information Processing Letters, 2009, 109(13): 663-667

    [20]Gastin P, Oddoux D. Fast LTL to Büchi automata translation[C]Proc of the 13th Int Conf on Computer Aided Verification. Berlin: Springer, 2012: 53-65

    [21]McMillan K L. Lazy abstraction with interpolants[C]Proc of the 18th Int Conf on Computer Aided Verification. Berlin: Springer, 2006: 123-136

    [22]Henzinger T A, Jhala R, Majumdar R. Abstractions from proofs[C]Pror of the 31st ACM SIGPLAN-SIGACT Symp on Principles of Programming Languages. New York: ACM, 2004: 232-244

    Duan Zhao, born in 1990. Received his MS degree from the Institute of Computing Theory and Technology, Xidian Universiy, Xi’an, in 2015. PhD candidate. His main research interests include software model checking and program analysis.

    Tian Cong, born in 1981. Professor and PhD supervisor in the Institute of Computing Theory and Technology, Xidian University. Member of IEEE.Her main research interests include theories in model checking, temporal logics and automata, formal verification of software systems, and software engineering.

    Duan Zhenhua, born in 1948. Professor and PhD supervisor in the Institute of Computing Theory and Technology, Xidian University. Senior member of IEEE. His main research interests include model checking, temporal logics, formal verification of software systems, and temporal logic programming.

    中圖法分類號TP31

    基金項目:國家自然科學(xué)基金項目(61322202,61420106004,91418201,61133001,61272117)

    收稿日期:2015-07-20;修回日期:2015-10-16

    This work was supported by the National Natural Science Foundation of China (61322202,61420106004,91418201,61133001,61272117).

    精品福利永久在线观看| 97超碰精品成人国产| av又黄又爽大尺度在线免费看| 美女主播在线视频| av播播在线观看一区| 中文字幕人妻熟女乱码| 国产一区二区三区av在线| 看非洲黑人一级黄片| www.色视频.com| 女人精品久久久久毛片| 男女国产视频网站| 免费观看无遮挡的男女| 搡老乐熟女国产| 久久精品久久精品一区二区三区| 咕卡用的链子| 国产老妇伦熟女老妇高清| 天天躁夜夜躁狠狠躁躁| 女性生殖器流出的白浆| 美女国产视频在线观看| 日本欧美国产在线视频| 亚洲精品久久成人aⅴ小说| 日本黄大片高清| 最近最新中文字幕免费大全7| 91在线精品国自产拍蜜月| 国产69精品久久久久777片| 国产又色又爽无遮挡免| 男人操女人黄网站| 久久韩国三级中文字幕| 国产亚洲精品第一综合不卡 | 精品国产乱码久久久久久小说| 在线观看美女被高潮喷水网站| 99热全是精品| 十八禁网站网址无遮挡| 日本色播在线视频| 精品国产一区二区久久| 女性被躁到高潮视频| 精品久久久精品久久久| av国产精品久久久久影院| 男女国产视频网站| 国产精品三级大全| 亚洲av男天堂| 成人影院久久| av国产久精品久网站免费入址| a级毛片黄视频| 妹子高潮喷水视频| 黑人巨大精品欧美一区二区蜜桃 | 久久99一区二区三区| 18在线观看网站| 亚洲欧美成人综合另类久久久| 极品人妻少妇av视频| 18禁裸乳无遮挡动漫免费视频| 国产亚洲午夜精品一区二区久久| 日本爱情动作片www.在线观看| 美女内射精品一级片tv| 女性被躁到高潮视频| 蜜桃国产av成人99| 欧美成人精品欧美一级黄| 天堂8中文在线网| 免费大片黄手机在线观看| 十八禁高潮呻吟视频| 丝袜在线中文字幕| 男人舔女人的私密视频| 乱码一卡2卡4卡精品| 青春草视频在线免费观看| 久久亚洲国产成人精品v| 欧美激情极品国产一区二区三区 | 久久久久视频综合| 国产片内射在线| 纵有疾风起免费观看全集完整版| 国产免费福利视频在线观看| 母亲3免费完整高清在线观看 | 日韩一区二区三区影片| 男人添女人高潮全过程视频| 高清黄色对白视频在线免费看| 欧美bdsm另类| 一二三四中文在线观看免费高清| 男人舔女人的私密视频| 国产在线免费精品| 蜜臀久久99精品久久宅男| 国产精品欧美亚洲77777| 国产精品熟女久久久久浪| 日本91视频免费播放| 久久鲁丝午夜福利片| 哪个播放器可以免费观看大片| 一区二区三区四区激情视频| 丁香六月天网| 欧美精品一区二区大全| 成人18禁高潮啪啪吃奶动态图| 韩国高清视频一区二区三区| 欧美最新免费一区二区三区| 亚洲精品乱久久久久久| 侵犯人妻中文字幕一二三四区| 国产精品国产av在线观看| 亚洲av中文av极速乱| 伦理电影免费视频| 久久精品久久久久久久性| 中国美白少妇内射xxxbb| 日本与韩国留学比较| 久久久久久久精品精品| 亚洲伊人色综图| 免费高清在线观看日韩| 97在线视频观看| 51国产日韩欧美| 亚洲精华国产精华液的使用体验| 五月伊人婷婷丁香| 国产免费一区二区三区四区乱码| 国产色婷婷99| 国产精品 国内视频| 有码 亚洲区| 国产成人aa在线观看| 亚洲人成网站在线观看播放| 欧美精品一区二区免费开放| 热re99久久国产66热| 国产爽快片一区二区三区| 深夜精品福利| 香蕉国产在线看| 久久午夜综合久久蜜桃| 另类精品久久| 精品人妻熟女毛片av久久网站| 日韩中字成人| 我要看黄色一级片免费的| 日韩电影二区| 成人手机av| 免费观看性生交大片5| 久久久久久人妻| 久久精品人人爽人人爽视色| 一级片'在线观看视频| 97人妻天天添夜夜摸| 免费看不卡的av| 国产精品成人在线| 18禁在线无遮挡免费观看视频| 乱码一卡2卡4卡精品| 亚洲国产精品一区二区三区在线| 色视频在线一区二区三区| 男人舔女人的私密视频| 22中文网久久字幕| 视频中文字幕在线观看| 新久久久久国产一级毛片| 欧美精品一区二区大全| 青青草视频在线视频观看| 久久久久久人人人人人| 亚洲欧美一区二区三区黑人 | av女优亚洲男人天堂| 两个人免费观看高清视频| 婷婷色麻豆天堂久久| 天美传媒精品一区二区| 少妇精品久久久久久久| 久久久久久久久久久久大奶| 国精品久久久久久国模美| 一个人免费看片子| 男人操女人黄网站| 精品一区二区三区视频在线| 在线精品无人区一区二区三| 日韩中文字幕视频在线看片| 麻豆精品久久久久久蜜桃| 亚洲中文av在线| 2022亚洲国产成人精品| 丰满迷人的少妇在线观看| 三上悠亚av全集在线观看| 欧美xxⅹ黑人| 久久人人爽av亚洲精品天堂| 精品亚洲成a人片在线观看| 交换朋友夫妻互换小说| 卡戴珊不雅视频在线播放| 丝袜喷水一区| av免费观看日本| 最后的刺客免费高清国语| 日韩一区二区视频免费看| 哪个播放器可以免费观看大片| 久久午夜福利片| 久久婷婷青草| 日本wwww免费看| 欧美国产精品va在线观看不卡| 国产精品人妻久久久久久| 免费播放大片免费观看视频在线观看| 国产黄色视频一区二区在线观看| 欧美激情极品国产一区二区三区 | 日韩成人伦理影院| 免费不卡的大黄色大毛片视频在线观看| 免费黄色在线免费观看| 亚洲av电影在线进入| 亚洲综合色网址| 麻豆乱淫一区二区| www.av在线官网国产| 一本色道久久久久久精品综合| 又黄又粗又硬又大视频| 国产精品蜜桃在线观看| 成年动漫av网址| 90打野战视频偷拍视频| 亚洲一区二区三区欧美精品| 亚洲精品乱久久久久久| 国产av国产精品国产| 在线观看www视频免费| 日韩一区二区视频免费看| 高清黄色对白视频在线免费看| av免费在线看不卡| 亚洲成人手机| 欧美成人午夜免费资源| 亚洲精品美女久久av网站| 91aial.com中文字幕在线观看| 国产视频首页在线观看| 熟女人妻精品中文字幕| 狂野欧美激情性xxxx在线观看| 大香蕉97超碰在线| 黑人巨大精品欧美一区二区蜜桃 | 免费av中文字幕在线| 99久久精品国产国产毛片| 亚洲少妇的诱惑av| 中文天堂在线官网| 91久久精品国产一区二区三区| a级毛色黄片| 国产精品久久久久久久电影| 成人18禁高潮啪啪吃奶动态图| 亚洲伊人色综图| 精品人妻偷拍中文字幕| 18禁在线无遮挡免费观看视频| 国产又爽黄色视频| 欧美精品一区二区免费开放| 亚洲精品日本国产第一区| a级片在线免费高清观看视频| 精品一区二区免费观看| 性色av一级| 中文字幕另类日韩欧美亚洲嫩草| 亚洲色图综合在线观看| 日本欧美视频一区| 少妇人妻 视频| 51国产日韩欧美| 成人亚洲精品一区在线观看| 免费大片18禁| 久久精品aⅴ一区二区三区四区 | 有码 亚洲区| 久久久久久人妻| 亚洲一区二区三区欧美精品| 欧美 亚洲 国产 日韩一| 99国产精品免费福利视频| 国产一区亚洲一区在线观看| 中文字幕免费在线视频6| 日韩av在线免费看完整版不卡| av国产久精品久网站免费入址| 国产不卡av网站在线观看| 美女国产视频在线观看| 天天躁夜夜躁狠狠躁躁| 91aial.com中文字幕在线观看| 色婷婷久久久亚洲欧美| 成人亚洲欧美一区二区av| 亚洲欧洲精品一区二区精品久久久 | 老司机影院毛片| 在线观看国产h片| 日本91视频免费播放| 视频在线观看一区二区三区| 中国国产av一级| 2022亚洲国产成人精品| 我的女老师完整版在线观看| 日本猛色少妇xxxxx猛交久久| 亚洲国产最新在线播放| 黄片播放在线免费| 国产日韩欧美视频二区| 成年动漫av网址| 国产成人精品久久久久久| 啦啦啦在线观看免费高清www| 在线 av 中文字幕| 日韩欧美一区视频在线观看| 免费高清在线观看视频在线观看| 免费大片18禁| 三上悠亚av全集在线观看| 国产男女超爽视频在线观看| 亚洲国产欧美在线一区| 国产 精品1| 欧美激情国产日韩精品一区| 少妇被粗大猛烈的视频| av国产久精品久网站免费入址| 欧美精品高潮呻吟av久久| 母亲3免费完整高清在线观看 | 亚洲精品,欧美精品| 一区二区三区四区激情视频| 久久精品国产鲁丝片午夜精品| 男女边摸边吃奶| 国产在视频线精品| 亚洲av电影在线进入| 天堂8中文在线网| 成年动漫av网址| 97在线视频观看| 国产一级毛片在线| 久久午夜福利片| 亚洲少妇的诱惑av| 99精国产麻豆久久婷婷| 99久久中文字幕三级久久日本| 国产精品久久久久久精品电影小说| 国产精品麻豆人妻色哟哟久久| 狠狠婷婷综合久久久久久88av| 又粗又硬又长又爽又黄的视频| 国产黄色视频一区二区在线观看| 午夜免费观看性视频| 亚洲色图 男人天堂 中文字幕 | a级毛色黄片| 岛国毛片在线播放| 女人精品久久久久毛片| 国产 精品1| 免费看光身美女| 国产成人91sexporn| 亚洲av免费高清在线观看| 18+在线观看网站| 哪个播放器可以免费观看大片| 99九九在线精品视频| 精品人妻在线不人妻| 黄片无遮挡物在线观看| 99热这里只有是精品在线观看| 国产免费一级a男人的天堂| 9191精品国产免费久久| 国产精品一区二区在线观看99| 日本av手机在线免费观看| 午夜视频国产福利| 日韩精品有码人妻一区| 天美传媒精品一区二区| 极品人妻少妇av视频| 啦啦啦中文免费视频观看日本| 国产69精品久久久久777片| 亚洲精品美女久久久久99蜜臀 | 2022亚洲国产成人精品| 在线观看美女被高潮喷水网站| 熟妇人妻不卡中文字幕| 免费女性裸体啪啪无遮挡网站| 欧美少妇被猛烈插入视频| 丝袜在线中文字幕| 国产av码专区亚洲av| 精品久久国产蜜桃| 亚洲精品中文字幕在线视频| 久久精品人人爽人人爽视色| 啦啦啦在线观看免费高清www| 欧美日韩av久久| 国产av一区二区精品久久| 七月丁香在线播放| 自线自在国产av| 日韩中字成人| 纯流量卡能插随身wifi吗| 超色免费av| 亚洲人与动物交配视频| 边亲边吃奶的免费视频| 国产片特级美女逼逼视频| 欧美日韩一区二区视频在线观看视频在线| 精品国产国语对白av| 大香蕉久久网| 美女内射精品一级片tv| 欧美最新免费一区二区三区| 久久午夜福利片| 日韩成人伦理影院| 欧美日韩精品成人综合77777| 亚洲国产最新在线播放| 国产午夜精品一二区理论片| 国产精品免费大片| 美女中出高潮动态图| 日韩三级伦理在线观看| 欧美精品高潮呻吟av久久| 亚洲av.av天堂| 高清毛片免费看| 欧美bdsm另类| 欧美成人午夜免费资源| 国产一区二区在线观看av| 国产欧美日韩一区二区三区在线| av福利片在线| 午夜精品国产一区二区电影| 又大又黄又爽视频免费| av线在线观看网站| 日韩大片免费观看网站| 美女中出高潮动态图| 午夜激情久久久久久久| 午夜福利乱码中文字幕| 国产亚洲最大av| 欧美变态另类bdsm刘玥| 制服人妻中文乱码| 久久av网站| 欧美日韩视频高清一区二区三区二| 熟女av电影| 久久ye,这里只有精品| 久久毛片免费看一区二区三区| 久久久精品94久久精品| 日韩成人伦理影院| 免费观看性生交大片5| 捣出白浆h1v1| 亚洲成人手机| 狠狠婷婷综合久久久久久88av| 又黄又粗又硬又大视频| 成人毛片a级毛片在线播放| a 毛片基地| 男女边摸边吃奶| 亚洲精品成人av观看孕妇| av在线观看视频网站免费| 国产日韩欧美视频二区| 日本色播在线视频| 亚洲精品一区蜜桃| 日韩三级伦理在线观看| 久久这里有精品视频免费| 男女国产视频网站| 亚洲成av片中文字幕在线观看 | 人妻人人澡人人爽人人| 国产免费福利视频在线观看| 熟女人妻精品中文字幕| 超色免费av| 婷婷成人精品国产| 国产精品秋霞免费鲁丝片| 丝瓜视频免费看黄片| 亚洲av.av天堂| 国产精品麻豆人妻色哟哟久久| 精品午夜福利在线看| 美女中出高潮动态图| 黑人猛操日本美女一级片| 亚洲精品一二三| 亚洲情色 制服丝袜| 国产探花极品一区二区| 精品卡一卡二卡四卡免费| 99国产综合亚洲精品| 国产亚洲精品久久久com| 大话2 男鬼变身卡| 免费黄色在线免费观看| 一区在线观看完整版| 成年美女黄网站色视频大全免费| 9191精品国产免费久久| 天堂中文最新版在线下载| a级毛片黄视频| 成人毛片a级毛片在线播放| 久久久久国产精品人妻一区二区| 黄片无遮挡物在线观看| 免费黄网站久久成人精品| 国产成人免费观看mmmm| 国产色婷婷99| 丰满迷人的少妇在线观看| 亚洲久久久国产精品| 免费观看性生交大片5| videosex国产| 最近手机中文字幕大全| 男的添女的下面高潮视频| 久久精品夜色国产| 免费人妻精品一区二区三区视频| 黄色 视频免费看| 国产极品粉嫩免费观看在线| 精品亚洲成a人片在线观看| 国产一区亚洲一区在线观看| 国产av一区二区精品久久| 亚洲情色 制服丝袜| 国产在线免费精品| 日韩免费高清中文字幕av| 亚洲av欧美aⅴ国产| 久久午夜福利片| 久久精品国产亚洲av涩爱| 国产视频首页在线观看| 欧美精品高潮呻吟av久久| 蜜臀久久99精品久久宅男| av福利片在线| 人妻少妇偷人精品九色| 欧美 日韩 精品 国产| 丝袜喷水一区| av免费在线看不卡| 性色av一级| 国产精品无大码| 热re99久久精品国产66热6| 久久久久久久久久久久大奶| 在现免费观看毛片| 夫妻性生交免费视频一级片| 在线观看免费高清a一片| 国产一区二区三区综合在线观看 | 日日啪夜夜爽| 日韩不卡一区二区三区视频在线| 亚洲成人一二三区av| 亚洲一区二区三区欧美精品| www日本在线高清视频| 大陆偷拍与自拍| 久久精品国产综合久久久 | 亚洲国产最新在线播放| 人人妻人人澡人人爽人人夜夜| 亚洲 欧美一区二区三区| 久久久久久久久久成人| 激情五月婷婷亚洲| 热99久久久久精品小说推荐| 有码 亚洲区| 两个人免费观看高清视频| 国产片内射在线| 热99久久久久精品小说推荐| 国产精品三级大全| 精品视频人人做人人爽| 高清av免费在线| 日本欧美视频一区| 日韩三级伦理在线观看| 丁香六月天网| 各种免费的搞黄视频| 国产乱人偷精品视频| 亚洲欧洲日产国产| 日本欧美视频一区| 777米奇影视久久| 亚洲第一av免费看| 七月丁香在线播放| 在线观看人妻少妇| 亚洲国产av影院在线观看| 狠狠精品人妻久久久久久综合| 观看av在线不卡| 亚洲国产成人一精品久久久| 少妇被粗大猛烈的视频| 午夜精品国产一区二区电影| 日本wwww免费看| 天天躁夜夜躁狠狠躁躁| 免费播放大片免费观看视频在线观看| 妹子高潮喷水视频| 在线观看免费日韩欧美大片| 秋霞在线观看毛片| a级毛片在线看网站| 97人妻天天添夜夜摸| 日韩一本色道免费dvd| 午夜激情av网站| 人成视频在线观看免费观看| 老司机影院成人| 十八禁网站网址无遮挡| 一本色道久久久久久精品综合| 男女午夜视频在线观看 | 啦啦啦视频在线资源免费观看| 久久久久久久久久成人| 黄色怎么调成土黄色| 久久久久久久久久成人| 在线观看美女被高潮喷水网站| 在线精品无人区一区二区三| 亚洲精品久久午夜乱码| 久久久久久久久久成人| 久久综合国产亚洲精品| 午夜视频国产福利| 中国国产av一级| 欧美+日韩+精品| 日本爱情动作片www.在线观看| 日韩,欧美,国产一区二区三区| 99九九在线精品视频| 亚洲精品视频女| 亚洲av在线观看美女高潮| 国产精品欧美亚洲77777| 亚洲中文av在线| 日本欧美国产在线视频| 日本色播在线视频| 日韩精品免费视频一区二区三区 | 自线自在国产av| 制服诱惑二区| 国产精品三级大全| 夜夜爽夜夜爽视频| 我的女老师完整版在线观看| 成人综合一区亚洲| 欧美少妇被猛烈插入视频| 亚洲欧美成人精品一区二区| 一级毛片电影观看| 成人午夜精彩视频在线观看| 亚洲国产精品一区三区| 免费大片黄手机在线观看| 欧美日韩国产mv在线观看视频| 插逼视频在线观看| 国产精品久久久久久精品电影小说| 亚洲精品乱码久久久久久按摩| 丰满饥渴人妻一区二区三| 亚洲av成人精品一二三区| 日本91视频免费播放| av片东京热男人的天堂| 国产深夜福利视频在线观看| 七月丁香在线播放| tube8黄色片| 一边亲一边摸免费视频| av视频免费观看在线观看| 成人18禁高潮啪啪吃奶动态图| 亚洲性久久影院| av国产精品久久久久影院| 波野结衣二区三区在线| 亚洲国产最新在线播放| 天堂中文最新版在线下载| 亚洲国产精品成人久久小说| 国产黄色免费在线视频| 超碰97精品在线观看| 精品国产乱码久久久久久小说| 99久久人妻综合| 在线观看三级黄色| 午夜免费男女啪啪视频观看| 亚洲情色 制服丝袜| 女人久久www免费人成看片| 18禁在线无遮挡免费观看视频| 精品熟女少妇av免费看| 最近2019中文字幕mv第一页| 国产精品无大码| 久久精品国产a三级三级三级| 亚洲av福利一区| 伦理电影大哥的女人| 亚洲精品第二区| 免费不卡的大黄色大毛片视频在线观看| 欧美日本中文国产一区发布| 亚洲欧美中文字幕日韩二区| 国产麻豆69| 欧美人与善性xxx| av女优亚洲男人天堂| 精品久久久久久电影网| 人人妻人人爽人人添夜夜欢视频| 成年人午夜在线观看视频| 日韩精品有码人妻一区| 宅男免费午夜| 久久久久网色| 国产一区二区在线观看av| 亚洲成av片中文字幕在线观看 | 在现免费观看毛片| 日韩精品有码人妻一区| 久久av网站| 亚洲国产色片| 国产一区二区在线观看av| 一本一本久久a久久精品综合妖精 国产伦在线观看视频一区 | 人妻少妇偷人精品九色| 亚洲综合色惰| 日本黄色日本黄色录像| 日韩 亚洲 欧美在线| 免费不卡的大黄色大毛片视频在线观看| 美女xxoo啪啪120秒动态图| 插逼视频在线观看| 欧美xxxx性猛交bbbb| 美女主播在线视频| 国产精品麻豆人妻色哟哟久久| 国产免费现黄频在线看| 黑人欧美特级aaaaaa片| 欧美人与善性xxx|