[發明專利]一種高效且高可用的空間內存錯誤檢測方法有效
| 申請號: | 201410005315.5 | 申請日: | 2014-01-06 |
| 公開(公告)號: | CN103745755B | 公開(公告)日: | 2017-01-11 |
| 發明(設計)人: | 丁麗萍;趙曉柯;盧國慶 | 申請(專利權)人: | 中國科學院軟件研究所;公安部第三研究所 |
| 主分類號: | G11C29/56 | 分類號: | G11C29/56 |
| 代理公司: | 北京君尚知識產權代理事務所(普通合伙)11200 | 代理人: | 余長江 |
| 地址: | 100190 *** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 高效 可用 空間 內存 錯誤 檢測 方法 | ||
1.一種高效且高可用的空間內存錯誤檢測方法,包括以下步驟:
1)對程序進行靜態污點分析,標記污點指針;
2)對程序進行編譯生成中間代碼,并構建內存影子空間;
3)分析程序的中間代碼,創建所述污點指針的base和bound邊界信息,并存儲到所述內存影子空間;
4)分析所述中間代碼的指針運算、數組索引和指針賦值三種指令,將參與運算的被標記為污點指針的原始指針的邊界信息拷貝到運算后得到的結果指針對應的內存影子空間;
5)對程序中使用污點指針進行寫內存的指令進行指針邊界檢測,根據污點指針的base和bound邊界信息確定的內存邊界檢測出空間內存錯誤。
2.如權利要求1所述的空間內存錯誤檢測方法,其特征在于,步驟1)中,標記污點指針又包括以下步驟:
1-1)將程序調用的外部庫函數返回和修改的數據標記為污點,其中“數據”包括指針類型數據和非指針類型數據;
1-2)對程序進行數據流分析,傳播污點標記;
1-3)對程序進行指針別名分析,將與上述污點指針是別名關系的指針標記為污點。
3.如權利要求2所述的空間內存錯誤檢測方法,其特征在于,步驟1-1)中,還包括將程序所接受的用戶輸入的參數值標記為污點。
4.如權利要求3所述的空間內存錯誤檢測方法,其特征在于,步驟1-1)中所述的外部庫函數包括從文件中讀取數據的庫函數和從網絡中接收數據的庫函數,所述的用戶輸入的參數值是指程序的命令行參數。
5.如權利要求2所述的空間內存錯誤檢測方法,其特征在于,步驟1-2)中所述的數據流分析是程序間的數據流分析,步驟1-3)中所述的指針別名分析是指程序間的指針別名分析。
6.如權利要求1所述的空間內存錯誤檢測方法,其特征在于,步驟2)中所述的內存影子空間是通過分析中間代碼找到main函數,在main函數的第一條指令之前,插入調用mmap()庫函數的指令,在虛擬內存中創建的一塊內存區域,操作系統會為該內存區域按需分配實際的物理內存。
7.如權利要求1所述的空間內存錯誤檢測方法,其特征在于,步驟3)中所述的指針的base和bound邊界信息,是指指針指向的內存對象的地址邊界,包括base地址和bound地址,所述base地址表示訪問一個內存對象所允許使用的最低地址,所述bound地址表示訪問一個內存對象所允許使用的最高地址。
8.如權利要求1所述的空間內存錯誤檢測方法,其特征在于,步驟5)中所述的進行指針邊界檢測,是將指針和指針訪問的內存大小與指針的base和bound邊界信息進行比較,如果用ptr表示該指針,size表示指針訪問的內存大小,如果ptr<base或者ptr+size>bound,那么就說明該指針訪問內存時出現錯誤。
9.如權利要求1所述的空間內存錯誤檢測方法,其特征在于,步驟5)中當檢測到空間內存錯誤時,通過開啟程序的可用性功能,在程序中插入代碼,忽略會導致內存錯誤的指令,繼續執行下一條指令,提高程序的可用性;通過關閉程序的可用性功能,在程序中插入代碼,終止程序的執行。
10.如權利要求1所述的空間內存錯誤檢測方法,其特征在于,步驟5)中所述的輸出指針越界的相關信息,是指在檢測到指針訪問內存出現錯誤時,向用戶輸出指針值,指針指向的內存對象的邊界信息。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國科學院軟件研究所;公安部第三研究所,未經中國科學院軟件研究所;公安部第三研究所許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410005315.5/1.html,轉載請聲明來源鉆瓜專利網。





