鬼佬大哥大
  • / 14
  • 下載費用:30 金幣  

一種內存溢出檢測方法和系統.pdf

關 鍵 詞:
一種 內存 溢出 檢測 方法 系統
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
摘要
申請專利號:

CN201510284289.9

申請日:

2015.05.28

公開號:

CN104899157A

公開日:

2015.09.09

當前法律狀態:

駁回

有效性:

無權

法律詳情: 發明專利申請公布后的駁回 IPC(主分類):G06F 12/06申請公布日:20150909|||實質審查的生效IPC(主分類):G06F 12/06申請日:20150528|||公開
IPC分類號: G06F12/06 主分類號: G06F12/06
申請人: 北京北信源軟件股份有限公司
發明人: 林皓; 張聰; 吳振芳
地址: 100081北京市海淀區中關村南大街34號中關村科技發展大廈C座1602室
優先權:
專利代理機構: 北京路浩知識產權代理有限公司11002 代理人: 李相雨
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201510284289.9

授權公告號:

||||||

法律狀態公告日:

2019.03.15|||2015.10.21|||2015.09.09

法律狀態類型:

發明專利申請公布后的駁回|||實質審查的生效|||公開

摘要

本發明提供了一種內存溢出檢測方法和系統,該內存分配方法包括:在出現內存訪問異常事件時,檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問;所述隔離頁為預先為每一程序在內存地址空間內分配的內存地址段的末尾處設置的具有不可訪問屬性的一部分內存地址段;若存在任一程序對內存地址空間內的隔離頁進行了訪問,則判定該程序導致內存溢出。本發明提出的內存溢出檢測方法和系統,能夠及時發現潛在的內存溢出問題,無需占用物理內存的屬性,避免額外物理內存的占用,降低內存消耗,提升系統性能。

權利要求書

權利要求書
1.  一種內存溢出檢測方法,其特征在于,所述方法包括:
在出現內存訪問異常事件時,檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問;所述隔離頁為預先為每一程序在內存地址空間內分配的內存地址段的末尾處設置的具有不可訪問屬性的一部分內存地址段;
若存在任一程序對內存地址空間內的隔離頁進行了訪問,則判定該程序導致內存溢出。

2.  根據權利要求1所述的方法,其特征在于,所述檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,所述方法還包括:
捕獲操作系統出現的內存訪問異常事件。

3.  根據權利要求1或2所述的方法,其特征在于,所述檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問,包括:
獲取各程序運行過程中的內存訪問記錄;
根據所述內存訪問記錄,判斷是否存在任一程序對內存地址空間內的隔離頁進行了訪問。

4.  根據權利要求1所述的方法,其特征在于,在檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,所述方法還包括:
在一程序啟動時,確定當前啟動的程序在內存地址空間內分配的內存地址段,所述內存地址段包括連續設置的使用內存地址段和隔離頁;
將所述當前啟動的程序在內存地址空間內分配的內存地址段發送給操作系統,以使所述操作系統根據該內存地址段為當前啟動的程序分配內存塊;
所述使用內存地址段位于所述隔離頁之前,所述使用內存地址 段對應有物理內存。

5.  根據權利要求4所述的方法,其特征在于,所述確定當前啟動的程序在內存地址空間內分配的內存地址段,包括:
接收所述當前啟動的程序的內存分配請求,所述內存分配請求包括預請求分配的內存塊的大小;
根據所述內存分配請求,以及當前操作系統的內存分配粒度,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。

6.  根據權利要求5所述的方法,其特征在于,所述根據所述內存分配請求,以及當前系統的內存分配粒度,確定所述當前啟動的程序在內存地址空間內分配的內存地址段,包括:
在所述預請求分配的內存塊的大小為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小等于所述預請求分配的內存塊大小;
在所述預請求分配的內存塊的大小不為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小為所述預請求分配的內存塊的大小的向上取整對齊;
確定所述隔離頁的大小為所述內存分配粒度;
根據所述使用內存地址段的大小和所述隔離頁的大小,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。

7.  根據權利要求6所述的方法,其特征在于,所述方法還包括:
在所述使用內存地址段對應的物理內存大于所述預請求分配的內存塊時,向所述當前啟動的程序返回與所述預請求分配的內存塊的大小相等的物理內存塊,所述物理內存塊為從所述使用內存地址段對應的物理內存的高地址端向低地址端選取的連續物理內存塊;
否則,將向所述當前啟動的程序返回所述使用內存地址段對應的物理內存。

8.  一種內存溢出檢測系統,其特征在于,所述系統包括:
檢測模塊,用于在出現內存訪問異常事件時,檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問;所述隔離頁為預先為每一程序在內存地址空間內分配的內存地址段的末尾處設置的具有不可訪問屬性的一部分內存地址段;
判定模塊,用于當所述檢測模塊的檢測結果為存在任一程序對內存地址空間內的隔離頁進行了訪問時,判定該程序導致內存溢出。

9.  根據權利要求8所述的系統,其特征在于,所述系統還包括:
捕獲模塊,用于在所述檢測模塊檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,捕獲操作系統出現的內存訪問異常事件。

10.  根據權利要求8或9所述的系統,其特征在于,所述檢測模塊,包括:
獲取單元,用于獲取各程序運行過程中的內存訪問記錄;
判斷單元,用于根據所述獲取單元獲取的內存訪問記錄,判斷是否存在任一程序對內存地址空間內的隔離頁進行了訪問。

11.  根據權利要求8所述的系統,其特征在于,所述系統還包括:
地址段確定模塊,用于在檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,當一程序啟動時,確定當前啟動的程序在內存地址空間內分配的內存地址段,所述內存地址段包括連續設置的使用內存地址段和隔離頁;
發送模塊,用于將所述當前啟動的程序在內存地址空間內分配的內存地址段發送給操作系統,以使所述操作系統根據該內存地址段為當前啟動的程序分配內存塊;
所述使用內存地址段位于所述隔離頁之前,所述使用內存地址段對應有物理內存。

12.  根據權利要求11所述的系統,其特征在于,所述地址段確 定模塊,包括:
接收單元,用于接收所述當前啟動的程序的內存分配請求,所述內存分配請求包括預請求分配的內存塊的大小;
地址段確定單元,用于根據所述內存分配請求,以及當前操作系統的內存分配粒度,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。

13.  根據權利要求12所述的系統,其特征在于,所述地址段確定單元具體用于:
在所述預請求分配的內存塊的大小為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小等于所述預請求分配的內存塊大小;
在所述預請求分配的內存塊的大小不為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小為所述預請求分配的內存塊的大小的向上取整對齊;
確定所述隔離頁的大小為所述內存分配粒度;
根據所述使用內存地址段的大小和所述隔離頁的大小,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。

14.  根據權利要求13所述的方法,其特征在于,所述系統還包括:
地址返回模塊,用于在所述使用內存地址段對應的物理內存大于所述預請求分配的內存塊時,向所述當前啟動的程序返回與所述預請求分配的內存塊的大小相等的物理內存塊的內存地址,所述物理內存塊為從所述使用內存地址段對應的物理內存的高地址端向低地址端選取的連續物理內存塊;否則,將向所述當前啟動的程序返回所述使用內存地址段對應的物理內存。

說明書

說明書一種內存溢出檢測方法和系統
技術領域
本發明涉及計算機技術領域,尤其涉及一種內存溢出檢測方法和系統。
背景技術
高效的內存分配、釋放和整理在計算機應用中已越來越重要,內存在使用過程中經常出現內存溢出現象,導致計算機程序異常或者錯誤,嚴重時將導致計算機死機,因此內存溢出的檢測對計算機系統非常重要。內存溢出是指計算機程序按照指定的大小分配內存區域存儲數據后,寫入內存的數據超出預先分配的內存區域,從而導致改寫了其他內存區域的數據。
現有技術中,在申請的內存塊的頭部和末尾追加多個字節的特定標記值,然后在某個特定時機,比如內存釋放時,通過主動檢測上述特定標記值來判斷內存塊的使用是否發生溢出,如果檢測到的特定標記值發生改變,則可以確定該段內存塊的使用發生內存溢出現象。
在實現本發明過程中,發明人發現現有技術中至少存在如下問題:
由于程序在運行過程中往往會有大量的內存申請、釋放操作,因此大量的特定標記值會占用額外物理內存,而且現有技術的內存溢出檢測方法,只有在已經發生內存溢出現象之后進行主動檢測時才會發現溢出,不能及時發現內存溢出現象的發生。
發明內容
本發明提供一種內存溢出檢測的方法和系統,用以解決現有技術在內存溢出檢測過程中存在的占用額外物理內存以及不能及時發現內存溢出現象的問題。
根據本發明的一個方面,提供了一種內存溢出檢測方法,該方法包括:
在出現內存訪問異常事件時,檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問;所述隔離頁為預先為每一程序在內存地址空間內分配的內存地址段的末尾處設置的具有不可訪問屬性的一部分內存地址段;
若存在任一程序對內存地址空間內的隔離頁進行了訪問,則判定該程序導致內存溢出。
可選的,所述檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,所述方法還包括:
捕獲操作系統出現的內存訪問異常事件。
可選的,所述檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問,包括:
獲取各程序運行過程中的內存訪問記錄;
根據所述內存訪問記錄,判斷是否存在任一程序對內存地址空間內的隔離頁進行了訪問。
可選的,在檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,所述方法還包括:
在一程序啟動時,確定當前啟動的程序在內存地址空間內分配的內存地址段,所述內存地址段包括連續設置的使用內存地址段和隔離頁;
將所述當前啟動的程序在內存地址空間內分配的內存地址段發送給操作系統,以使所述操作系統根據該內存地址段為當前啟動的程序分配內存塊;
所述使用內存地址段位于所述隔離頁之前,所述使用內存地址段對應有物理內存。
可選的,所述確定當前啟動的程序在內存地址空間內分配的內存 地址段,包括:
接收所述當前啟動的程序的內存分配請求,所述內存分配請求包括預請求分配的內存塊的大小;
根據所述內存分配請求,以及當前操作系統的內存分配粒度,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。
可選的,所述根據所述內存分配請求,以及當前系統的內存分配粒度,確定所述當前啟動的程序在內存地址空間內分配的內存地址段,包括:
在所述預請求分配的內存塊的大小為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小等于所述預請求分配的內存塊大小;
在所述預請求分配的內存塊的大小不為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小為所述預請求分配的內存塊的大小的向上取整對齊;
確定所述隔離頁的大小為所述內存分配粒度;
根據所述使用內存地址段的大小和所述隔離頁的大小,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。
可選的,所述方法還包括:
在所述使用內存地址段對應的物理內存大于所述預請求分配的內存塊時,向所述當前啟動的程序返回與所述預請求分配的內存塊的大小相等的物理內存塊,所述物理內存塊為從所述使用內存地址段對應的物理內存的高地址端向低地址端選取的連續物理內存塊;
否則,將向所述當前啟動的程序返回所述使用內存地址段對應的物理內存。
根據本發明的另一個方面,提供了一種內存溢出檢測系統,該系統包括:
檢測模塊,用于在出現內存訪問異常事件時,檢測是否存在任一 程序對內存地址空間內的隔離頁進行了訪問;所述隔離頁為預先為每一程序在內存地址空間內分配的內存地址段的末尾處設置的具有不可訪問屬性的一部分內存地址段;
判定模塊,用于當所述檢測模塊的檢測結果為存在任一程序對內存地址空間內的隔離頁進行了訪問時,判定該程序導致內存溢出。
可選的,所述系統還包括:
捕獲模塊,用于在所述檢測模塊檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,捕獲操作系統出現的內存訪問異常事件。
可選的,所述檢測模塊,包括:
獲取單元,用于獲取各程序運行過程中的內存訪問記錄;
判斷單元,用于根據所述獲取單元獲取的內存訪問記錄,判斷是否存在任一程序對內存地址空間內的隔離頁進行了訪問。
可選的,所述系統還包括:
地址段確定模塊,用于在檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,當一程序啟動時,確定當前啟動的程序在內存地址空間內分配的內存地址段,所述內存地址段包括連續設置的使用內存地址段和隔離頁;
發送模塊,用于將所述當前啟動的程序在內存地址空間內分配的內存地址段發送給操作系統,以使所述操作系統根據該內存地址段為當前啟動的程序分配內存塊;
所述使用內存地址段位于所述隔離頁之前,所述使用內存地址段對應有物理內存。
可選的,所述地址段確定模塊,包括:
接收單元,用于接收所述當前啟動的程序的內存分配請求,所述內存分配請求包括預請求分配的內存塊的大小;
地址段確定單元,用于根據所述內存分配請求,以及當前操作系 統的內存分配粒度,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。
可選的,所述地址段確定單元具體用于:
在所述預請求分配的內存塊的大小為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小等于所述預請求分配的內存塊大小;
在所述預請求分配的內存塊的大小不為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小為所述預請求分配的內存塊的大小的向上取整對齊;
確定所述隔離頁的大小為所述內存分配粒度;
根據所述使用內存地址段的大小和所述隔離頁的大小,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。
可選的,所述系統還包括:
地址返回模塊,用于在所述使用內存地址段對應的物理內存大于所述預請求分配的內存塊時,向所述當前啟動的程序返回與所述預請求分配的內存塊的大小相等的物理內存塊的內存地址,所述物理內存塊為從所述使用內存地址段對應的物理內存的高地址端向低地址端選取的連續物理內存塊;否則,將向所述當前啟動的程序返回所述使用內存地址段對應的物理內存。
本發明的有益效果為:
本發明提供的內存溢出檢測方法和系統,通過觸發檢測的方法,當捕獲到內存訪問異常事件時,觸發內存溢出檢測,可以有效檢測和防御內存溢出類漏洞攻擊手段,而且在軟件測試工作中可以更有效的發現潛在的內存溢出問題,進而提高軟件質量;
通過檢測是否存在任一程序對預先設置的具有不可訪問屬性的隔離頁進行了訪問,判斷內存溢出的發生,由于隔離頁只占用內存地址空間,不占用物理內存的屬性,避免額外物理內存的占用,降 低內存消耗,提升系統性能。
附圖說明
通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1為本發明實施例提出的一種內存溢出檢測方法的流程圖;
圖2為本發明另實施例提出的一種內存溢出檢測方法的流程圖;
圖3為本發明實施例中提出的在內存地址空間內申請8KB的內存地址段的示意圖;
圖4為本發明實施例提出的一種內存溢出檢測系統的結構框圖;
圖5為本發明另實施例提出的一種內存溢出檢測系統的結構框圖。
具體實施方式
下面詳細描述本發明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發明,而不能解釋為對本發明的限制。
本技術領域技術人員可以理解,除非特意聲明,這里使用的單數形式“一”、“一個”、“所述”和“該”也可包括復數形式。應該進一步理解的是,本發明的說明書中使用的措辭“包括”是指存在所述特征、整數、步驟、操作、元件和/或組件,但是并不排除存在或添加一個或多個其他特征、整數、步驟、操作、元件、組件和/或它們的組。
本技術領域技術人員可以理解,除非另外定義,這里使用的所有術語(包括技術術語和科學術語),具有與本發明所屬領域中的普通技術人員的一般理解相同的意義。還應該理解的是,諸如通用字典中定義的那些術語,應該被理解為具有與現有技術的上下文中的意義一 致的意義,并且除非被特定定義,否則不會用理想化或過于正式的含義來解釋。
為了更好的理解本發明的技術方案,首先對技術方案中使用的一些術語進行解釋,其中:內存塊是指物理內存塊;
內存地址空間是指對物理存儲器編碼(編碼地址)的范圍,每一個物理內存塊在內存地址空間內分配有對應有的內存地址段,根據內存地址空間對物理存儲器完成數據的讀寫;
使用內存地址段,為內存地址空間內對應有物理內存的內存地址段,操作系統根據使用內存地址段對完成對應的物理內存的數據的讀寫;
隔離頁,設置在使用內存地址段的結束地址之后,與使用內存地址段共同組成程序在內存地址空間內分配的內存地址段,只占用內存地址空間的具有不可訪問屬性的內存地址段,不占用物理內存。
另外,需要說明的是,以下實施例是以Windows操作系統為例進行說明的,本發明不限定Windows操作系統,對于其他的操作系統本發明的方案也是能夠實現的。
圖1示出了本發明實施例的一種內存溢出檢測方法的流程圖。
參照圖1,本發明實施例提出的內存溢出檢測方法包括:
S11、在出現內存訪問異常事件時,檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問;所述隔離頁為預先為每一程序在內存地址空間內分配的內存地址段的末尾處設置的具有不可訪問屬性的一部分內存地址段;
本發明實施例的步驟S11中,檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問,包括:
獲取各程序運行過程中的內存訪問記錄;
根據所述內存訪問記錄,判斷是否存在任一程序對內存地址空間內的隔離頁進行了訪問。
S12、若存在任一程序對內存地址空間內的隔離頁進行了訪問,則判定該程序導致內存溢出。
在實際應用中,前述圖1所示的方法在步驟S11之前,還可包括下述的步驟S10,如圖2所示,內存溢出檢測方法還包括:
S10、捕獲操作系統出現的內存訪問異常事件。
本發明實施例中,由于隔離頁的不可訪問屬性當發生內存溢出時,就會對使用內存地址段后面的隔離頁進行讀寫操作,因為隔離頁屬性為不可訪問,此時就會觸發內存訪問異常時間,本發明實施例只需要及時捕獲操作系統出現的內存訪問異常事件,即可及時發現內存溢出現象的發生,而且由于隔離頁只占用內存地址空間,不占用物理內存的屬性,避免額外物理內存的占用,降低內存消耗,提升系統性能。
舉例來說,可通過預設的向量化異常處理函數VEH,在第一時間捕獲操作系統出現的內存訪問異常。
在實際應用中,前述步驟S10中的在檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,圖1所示的方法還可包括下述的圖中未示出的步驟A01和步驟A02:
A01、在一程序啟動時,確定當前啟動的程序在內存地址空間內分配的內存地址段,所述內存地址段包括連續設置的使用內存地址段和隔離頁;
A02、將所述當前啟動的程序在內存地址空間內分配的內存地址段發送給操作系統,以使所述操作系統根據該內存地址段為當前啟動的程序分配內存塊。
應理解的是,本實施例中使用內存地址段位于所述隔離頁之前,所述使用內存地址段對應有物理內存。
在實際應用中,步驟A01和步驟A02可位于前述圖2所示的步驟S10之前,也可位于步驟S10之后,本實施例可根據實際需要設置, 不對其進行限定。
本發明實施例中,在系統進行內存分配之前,本發明采用代碼鉤子技術,接管內存申請函數,在一程序啟動時,接收到當前啟動的程序的內存分配請求,根據所述內存分配請求,以及當前操作系統的內存分配粒度,重新確定當前啟動的程序在內存地址空間內分配的內存地址段,所述內存地址段包括連續設置的使用內存地址段和隔離頁;并重新確定的內存地址段發送給操作系統,以使所述操作系統根據該重新確定的內存地址段為當前啟動的程序分配內存塊。
另外,前述步驟A01中的確定當前啟動的程序在內存地址空間內分配的內存地址段,可包括下述的圖中未示出的步驟A011和步驟A012:
A011、接收所述當前啟動的程序的內存分配請求,所述內存分配請求包括預請求分配的內存塊的大小;
A012、根據所述內存分配請求,以及當前操作系統的內存分配粒度,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。
舉例來說,步驟A012可具體為:
在所述預請求分配的內存塊的大小為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小等于所述預請求分配的內存塊大小;在所述預請求分配的內存塊的大小不為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小為所述預請求分配的內存塊的大小的向上取整對齊;確定所述隔離頁的大小為所述內存分配粒度;
根據所述使用內存地址段的大小和所述隔離頁的大小,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。
下面以預請求分配的內存塊的大小不為所述內存分配粒度的整數倍的情況進行說明;
例如,當前啟動的程序申請3KB的內存塊,此時將預請求分配的內存塊的大小為3KB,根據內存分配粒度向上取整對齊,也就是4KB大小,則確定當前啟動的程序在內存地址空間內分配的內存地址段為包括4KB的使用內存地址段和追加在使用內存地址段之后的4KB的隔離頁,此時大小就是8KB,然后在內存地址空間內申請8KB的內存地址段,所述8KB的內存地址段的示意圖,如圖3所示。
需要說明的是,Windows操作系統的內存管理是以4KB作為基本分配粒度的,內存屬性的修改也以4KB作為基本單位,所以隔離頁要消耗4KB的內存地址空間。
本發明實施例提出的內存溢出檢測方法,還包括下述的圖中未示出的步驟A03:
A03、在所述使用內存地址段對應的物理內存大于所述預請求分配的內存塊時,向所述當前啟動的程序返回與所述預請求分配的內存塊的大小相等的物理內存塊,所述物理內存塊為從所述使用內存地址段對應的物理內存的高地址端向低地址端選取的連續物理內存塊;
否則,將向所述當前啟動的程序返回所述使用內存地址段對應的物理內存。
本發明實施例,操作系統根據重新確定的內存地址段為當前啟動的程序分配內存塊之后,當前程序運行時,本發明將會根據調用者實際申請的內存塊的大小,為調用者返回對應的物理內存。
例如,將使用內存地址段對應的物理內存末尾的3KB部分返回給調用者使用。
本發明實施例提供的內存分配及內存溢出檢測的方法,通過觸發檢測的方法,當捕獲到內存訪問異常事件時,觸發內存溢出檢測,可以有效檢測和防御內存溢出類漏洞攻擊手段,而且在軟件測試工作中可以更有效的發現潛在的內存溢出問題,進而提高軟件質量。
圖4示出了本發明實施例的一種內存溢出檢測系統的結構框圖。
參照圖4,本發明實施例提出的內存溢出檢測系統包括檢測模塊101和判定模塊102,其中:
所述的檢測模塊101,用于在出現內存訪問異常事件時,檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問;所述隔離頁為預先為每一程序在內存地址空間內分配的內存地址段的末尾處設置的具有不可訪問屬性的一部分內存地址段;
其中,檢測模塊101,包括:
獲取單元,用于獲取各程序運行過程中的內存訪問記錄;
判斷單元,用于根據所述獲取單元獲取的內存訪問記錄,判斷是否存在任一程序對內存地址空間內的隔離頁進行了訪問。
所述的判定模塊102,用于當所述檢測模塊的檢測結果為存在任一程序對內存地址空間內的隔離頁進行了訪問時,判定該程序導致內存溢出。
進一步地,本發明另一實施例提出的內存溢出檢測系統,如圖5所示,還包括捕獲模塊100:
所述的捕獲模塊100,用于在所述檢測模塊檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,捕獲操作系統出現的內存訪問異常事件。
進一步地,本發明實施例提出的內存溢出檢測系統還包括地址段確定模塊和發送模塊:
所述的地址段確定模塊,用于在檢測是否存在任一程序對內存地址空間內的隔離頁進行了訪問之前,當一程序啟動時,確定當前啟動的程序在內存地址空間內分配的內存地址段,所述內存地址段包括連續設置的使用內存地址段和隔離頁;
所述的發送模塊,用于將所述當前啟動的程序在內存地址空間內分配的內存地址段發送給操作系統,以使所述操作系統根據該內存地址段為當前啟動的程序分配內存塊;
所述使用內存地址段位于所述隔離頁之前,所述使用內存地址段對應有物理內存。
其中,地址段確定模塊,包括:
接收單元,用于接收所述當前啟動的程序的內存分配請求,所述內存分配請求包括預請求分配的內存塊的大小;
地址段確定單元,用于根據所述內存分配請求,以及當前操作系統的內存分配粒度,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。
更進一步地,所述地址段確定單元具體用于:
在所述預請求分配的內存塊的大小為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小等于所述預請求分配的內存塊大小;
在所述預請求分配的內存塊的大小不為所述內存分配粒度的整數倍時,確定所述使用內存地址段的大小為所述預請求分配的內存塊的大小的向上取整對齊;
確定所述隔離頁的大小為所述內存分配粒度;
根據所述使用內存地址段的大小和所述隔離頁的大小,確定所述當前啟動的程序在內存地址空間內分配的內存地址段。
本發明實施例提出的內存溢出檢測系統還包括:
地址返回模塊,用于在所述使用內存地址段對應的物理內存大于所述預請求分配的內存塊時,向所述當前啟動的程序返回與所述預請求分配的內存塊的大小相等的物理內存塊的內存地址,所述物理內存塊為從所述使用內存地址段對應的物理內存的高地址端向低地址端選取的連續物理內存塊;否則,將向所述當前啟動的程序返回所述使用內存地址段對應的物理內存。
本發明實施例,通過觸發檢測的方法,當捕獲到內存訪問異常事件時,觸發內存溢出檢測,可以有效檢測和防御內存溢出類漏洞 攻擊手段,而且在軟件測試工作中可以更有效的發現潛在的內存溢出問題,進而提高軟件質量。
需要說明的是,本發明實施例提出的內存溢出檢測系統的具體實現方式與本發明實施例的內存溢出檢測方法的具體實現方式類似,具體請參見方法部分的描述,為了減少冗余,不做贅述。
綜上所述,本發明提供的內存溢出檢測方法和系統,通過觸發檢測的方法,當捕獲到內存訪問異常事件時,觸發內存溢出檢測,可以有效檢測和防御內存溢出類漏洞攻擊手段,而且在軟件測試工作中可以更有效的發現潛在的內存溢出問題,進而提高軟件質量;
通過檢測是否存在任一程序對預先設置的具有不可訪問屬性的隔離頁進行了訪問,判斷內存溢出的發生,由于隔離頁只占用內存地址空間,不占用物理內存的屬性,避免額外物理內存的占用,降低內存消耗,提升系統性能。
通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到本發明可以通過硬件實現,也可以借助軟件加必要的通用硬件平臺的方式來實現。基于這樣的理解,本發明的技術方案可以以軟件產品的形式體現出來,該軟件產品可以存儲在一個非易失性存儲介質(可以是CD-ROM,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例所述的方法。
本領域技術人員可以理解附圖只是一個優選實施例的示意圖,附圖中的模塊或流程并不一定是實施本發明所必須的。
本領域技術人員可以理解實施例中的系統中的模塊可以按照實施例描述進行分布于實施例的系統中,也可以進行相應變化位于不同于本實施例的一個或多個系統中。上述實施例的模塊可以合并為一個模塊,也可以進一步拆分成多個子模塊。
以上所述僅是本發明的部分實施方式,應當指出,對于本技術領 域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。

關于本文
本文標題:一種內存溢出檢測方法和系統.pdf
鏈接地址:http://www.wwszu.club/p-6369449.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
鬼佬大哥大