[發(fā)明專利]一種面向程序內(nèi)存安全性驗證工具的靜態(tài)優(yōu)化方法有效
| 申請?zhí)枺?/td> | 202010160648.0 | 申請日: | 2020-03-10 |
| 公開(公告)號: | CN111443916B | 公開(公告)日: | 2021-06-22 |
| 發(fā)明(設計)人: | 陳哲;孫小祥;王沖 | 申請(專利權)人: | 南京航空航天大學 |
| 主分類號: | G06F8/41 | 分類號: | G06F8/41;G06F11/36 |
| 代理公司: | 南京經(jīng)緯專利商標代理有限公司 32200 | 代理人: | 施昊 |
| 地址: | 210016 江*** | 國省代碼: | 江蘇;32 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 面向 程序 內(nèi)存 安全性 驗證 工具 靜態(tài) 優(yōu)化 方法 | ||
1.一種面向程序內(nèi)存安全性驗證工具的靜態(tài)優(yōu)化方法,其特征在于,包括以下步驟:
(1)為程序代碼中出現(xiàn)的每個指針類型添加相應的指針類別變量,用于表示程序對指針所指向的內(nèi)存區(qū)域進行訪問的安全程度;所述指針類別變量的取值包括:Safe、Arith和Risky,Safe代表安全,Arith代表算術,Risky代表危險;
(2)建立一個存儲指針類別約束的表,用來記錄所有針對指針類別的約束,遍歷程序代碼,為每一個含有指針的語句生成約束并添加到該表中;
(3)消除指針類別約束表中的重復約束;
(4)建立一個存儲指針類別的表,用來記錄所有指針對應的指針類別,該表的大小為步驟(1)中添加的指針類別變量的個數(shù),初始內(nèi)容為空,在后續(xù)步驟中逐一填充每個指針對應的指針類別;
(5)根據(jù)指針類別約束表求解出所有值為Risky的指針類別變量,并將結果存入指針類別表中,并刪除指針類別約束表中用過的約束和關于Risky的約束;
(6)根據(jù)指針類別約束表求解出所有值為Arith的指針類別變量,并將結果存入指針類別表中,并刪除指針類別約束表中用過的約束和關于Arith的約束;
(7)求解出所有值為Safe的指針類別變量,并將結果存入指針類別表中,并刪除指針類別約束表;
(8)將指針類別表中各指針對應的指針類別提供給內(nèi)存安全性驗證工具,使得內(nèi)存安全性驗證工具能夠根據(jù)指針類別對代碼分析方法進行優(yōu)化。
2.根據(jù)權利要求1所述面向程序內(nèi)存安全性驗證工具的靜態(tài)優(yōu)化方法,其特征在于,在步驟(1)中,Safe表示程序對指針所指向的內(nèi)存區(qū)域的所有訪問都是安全的,不會出現(xiàn)內(nèi)存錯誤;Arith表示程序對指針所指向的內(nèi)存區(qū)域的訪問存在通過指針算術運算的可能性,存在出現(xiàn)訪問偏移量越界的可能性;Risky表示程序對指針所指向的內(nèi)存區(qū)域的訪問存在通過指針算術運算和不同類型轉化的可能性,存在出現(xiàn)訪問越界和類型不兼容的可能性。
3.根據(jù)權利要求1所述面向程序內(nèi)存安全性驗證工具的靜態(tài)優(yōu)化方法,其特征在于,在步驟(2)和(4)中,建立的表為容器類數(shù)據(jù)結構,包括數(shù)組和鏈表。
4.根據(jù)權利要求1所述面向程序內(nèi)存安全性驗證工具的靜態(tài)優(yōu)化方法,其特征在于,在步驟(2)中,生成約束的規(guī)則:
(a)指針算術運算:如果指針ti *qi pi被賦值為指針算術運算的結果,則該指針不是一個安全指針,即生成約束qi ≠ Safe;所述“ti *qi pi”表示指針pi的類型為ti*,類別為qi;
(b)不同類型轉化:如果指針ti *qi pi被轉化為指針tj *qj pj的類型,且ti和tj是不同的類型,則指針pi和指針pj都是危險指針,即生成約束qi = qj = Risky;所述“ti *qipi”表示指針pi的類型為ti*,類別為qi,所述“tj *qj pj”表示指針pj的類型為tj*,類別為qj;
(c)指針賦值:如果指針ti *qi pi被賦值給指針tj *qj pj,且ti和tj是相同的類型,則生成三個約束:
ti和tj中所有對應的指針類別都相同;
如果指針pj是一個Arith指針,則指針pi也是一個Arith指針,記作qj = Arith ? qi= Arith;
如果指針pj是一個Risky指針,則指針pi也是一個Risky指針,如果指針pi是一個Risky指針,則指針pj也是一個Risky指針,記作qj = Risky ? qi = Risky;
(d)指向指針的指針:如果指針ti *qj*qi pi是一個指向指針的指針,被指向的指針變量的類型為ti*,類別為qj,則生成約束:如果qi = Risky,則qj = Risky,記作qi = Risky? qj = Risky;所述“ti *qj*qi pi”表示指針pi的類型為ti**,類別為qi,pi指向的指針變量的類型為ti*,類別為qj。
5.根據(jù)權利要求4所述面向程序內(nèi)存安全性驗證工具的靜態(tài)優(yōu)化方法,其特征在于,在步驟(6)中,qi ≠ Safe的指針類別約束導致qi = Arith,再根據(jù)qi = Arith ? qj =Arith的約束傳遞,求解出所有的Arith指針類別。
6.根據(jù)權利要求1所述面向程序內(nèi)存安全性驗證工具的靜態(tài)優(yōu)化方法,其特征在于,在步驟(8)中,所述內(nèi)存安全性驗證工具為程序靜態(tài)或動態(tài)驗證工具。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于南京航空航天大學,未經(jīng)南京航空航天大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業(yè)授權和技術合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010160648.0/1.html,轉載請聲明來源鉆瓜專利網(wǎng)。





