欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

合法內(nèi)存訪問的探測方法及裝置的制造方法

文檔序號:9616208閱讀:380來源:國知局
合法內(nèi)存訪問的探測方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)程序領(lǐng)域,特別涉及一種合法內(nèi)存訪問的探測方法及裝置。
【背景技術(shù)】
[0002]內(nèi)存的非法訪問,包括數(shù)組溢出越界、操作非法指針、釋放錯誤內(nèi)存塊的地址信息等,一直都是軟件開發(fā)過程中最易發(fā)、危害最大和最難解決的問題之一。
[0003]目前普遍存在的C/C++內(nèi)存訪問合法性檢測工具主要有插樁式內(nèi)存檢測工具和動態(tài)二進(jìn)制分析工具兩種。
[0004]插樁式內(nèi)存檢測工具具體方法是在編譯C/C++源文件時,在內(nèi)存分配和訪問點插入監(jiān)控函數(shù)樁子,利用被訪問的內(nèi)存塊的地址信息和本次訪問范圍來識別訪問是否合法。
[0005]在檢測大型軟件的內(nèi)存訪問時,由于插樁式內(nèi)存檢測工具需要檢索巨量的內(nèi)存信息、互斥保護(hù)全局資源、維護(hù)工具各種數(shù)據(jù),所以一次合法內(nèi)存訪問的探測的性能是比較低下的。而一般軟件的內(nèi)存訪問又十分頻繁,每次訪問都需要進(jìn)行合法性檢查極大的影響了程序性能,導(dǎo)致插樁式內(nèi)存檢測工具無法應(yīng)用于商業(yè)級軟件之中。

【發(fā)明內(nèi)容】

[0006]如上文所述,鑒于插樁式內(nèi)存檢測工具檢測性能低下,而一般軟件絕大多數(shù)內(nèi)存訪問又都是合法訪問的事實前提下,本發(fā)明的主要目的在于提供一種合法內(nèi)存訪問的探測方法,旨在有效解決現(xiàn)有的內(nèi)存訪問合法性檢測技術(shù)在每次訪問內(nèi)存時,都需要通過插樁式內(nèi)存檢測工具進(jìn)行合法性檢查,導(dǎo)致性能低下的技術(shù)問題。
[0007]為了實現(xiàn)上述發(fā)明目的,本發(fā)明提供一種合法內(nèi)存訪問的探測方法,包括以下步驟:
[0008]建立緩存并初始化;
[0009]根據(jù)待檢測內(nèi)存塊的大小和地址計算緩存總位置索引;
[0010]當(dāng)程序訪問內(nèi)存時,根據(jù)緩存總位置索引尋址分級緩存單元,判斷是否可從該分級緩存單元中讀出內(nèi)存塊的地址信息;
[0011 ] 若是,則結(jié)合本次內(nèi)存訪問的范圍判斷本次訪問是否需要使用插樁式內(nèi)存檢測工具進(jìn)行檢測;
[0012]若否,則通過插樁式內(nèi)存檢測工具判斷本次訪問是否合法,并在訪問合法時向分級緩存單元中填入內(nèi)存塊的地址信息。
[0013]優(yōu)選地,所述根據(jù)待檢測內(nèi)存塊的大小和地址計算緩存總位置索引的步驟包括:
[0014]根據(jù)內(nèi)存塊大小選擇緩存級別;
[0015]根據(jù)待檢測的內(nèi)存塊的地址信息計算對應(yīng)在本級的級位置索引;
[0016]將所述級位置索引加上所處級的起始位置得到緩存總位置索引。
[0017]優(yōu)選地,所述結(jié)合本次內(nèi)存訪問的范圍判斷本次訪問是否需要使用插樁式內(nèi)存檢測工具進(jìn)行檢測的步驟包括:
[0018]當(dāng)實際訪問范圍在地址信息所限定范圍以內(nèi)時,判定本次訪問合法,繼續(xù)運(yùn)行被檢測程序;
[0019]當(dāng)實際訪問范圍超出地址信息所限定范圍時,不能判定本次訪問合法,執(zhí)行通過插樁式內(nèi)存檢測工具判斷本次訪問是否合法的步驟。
[0020]優(yōu)選地,上述方法還包括以下步驟:
[0021]當(dāng)內(nèi)存塊被釋放時,清理分級緩存單元中的內(nèi)存信息。
[0022]本發(fā)明還提供一種合法內(nèi)存訪問的探測裝置,其包括:
[0023]分級緩存建立模塊,建立緩存并初始化;
[0024]緩存索引計算模塊,用于根據(jù)待檢測內(nèi)存塊的大小和地址計算緩存總位置索引;
[0025]地址信息讀取模塊,用于當(dāng)程序訪問內(nèi)存時,根據(jù)緩存總位置索引尋址分級緩存單元,判斷是否可從該分級緩存單元中讀出內(nèi)存塊的地址信息;
[0026]第一合法性判斷模塊,用于當(dāng)可從分級緩存單元中讀出內(nèi)存塊的地址信息時,結(jié)合本次內(nèi)存訪問的范圍判斷本次訪問是否需要使用插樁式內(nèi)存檢測工具進(jìn)行檢測;
[0027]第二合法性判斷模塊,用于當(dāng)未能從分級緩存單元中讀出內(nèi)存塊的地址信息時,通過插樁式內(nèi)存檢測工具判斷本次訪問是否合法,
[0028]地址信息寫入模塊,用于在插樁式內(nèi)存檢測工具判定本次訪問合法時,向分級緩存單元中填入內(nèi)存塊的地址信息。
[0029]優(yōu)選地,所述緩存索引計算模塊用于:
[0030]根據(jù)內(nèi)存塊大小選擇緩存級別;
[0031]根據(jù)待檢測的內(nèi)存塊的地址信息計算對應(yīng)在本級的級位置索引;
[0032]將所述級位置索引加上所處級的起始位置得到緩存總位置索引。
[0033]優(yōu)選地,所述第一合法性判斷模塊用于:
[0034]當(dāng)實際訪問范圍在地址信息所限定范圍以內(nèi)時,判定本次訪問合法,繼續(xù)運(yùn)行被檢測程序;
[0035]當(dāng)實際訪問范圍超出地址信息所限定范圍時,不能判定本次訪問合法,通知第二合法性判斷模塊工作。
[0036]優(yōu)選地,上述裝置還包括:
[0037]緩存清理模塊,用于當(dāng)內(nèi)存塊被釋放時,清理分級緩存單元中的內(nèi)存信息。
[0038]本發(fā)明利用程序的局部性原理,在某段內(nèi)存第一次訪問檢查合法后將內(nèi)存地址信息緩存起來,后續(xù)再訪問這段內(nèi)存時直接從緩存中讀取內(nèi)存地址信息,從而對合法內(nèi)存訪問完成快速判斷,避免了現(xiàn)有的內(nèi)存訪問合法性檢測技術(shù)在每次訪問內(nèi)存時都需要通過插樁式內(nèi)存檢測工具進(jìn)行合法性檢查,提升了內(nèi)存訪問合法性檢測效率和軟件性能。
【附圖說明】
[0039]圖1為本發(fā)明一較佳實施例中合法內(nèi)存訪問的探測方法的流程示意圖;
[0040]圖2為本發(fā)明一較佳實施例中根據(jù)待檢測內(nèi)存塊的大小和地址計算緩存總位置索引的步驟流程示意圖;
[0041]圖3為本發(fā)明一較佳實施例中合法內(nèi)存訪問的探測裝置的結(jié)構(gòu)示意圖;
[0042]圖4為本發(fā)明另一較佳實施例中合法內(nèi)存訪問的探測裝置的結(jié)構(gòu)示意圖。
[0043]本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進(jìn)一步說明。
【具體實施方式】
[0044]應(yīng)當(dāng)理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0045]本發(fā)明提供一種合法內(nèi)存訪問的探測方法,參照圖1,本發(fā)明一實施例中,該合法內(nèi)存訪問的探測方法至少包括以下步驟:
[0046]S10,建立緩存并初始化;例如,可根據(jù)對一般軟件內(nèi)存使用情況的統(tǒng)計數(shù)據(jù),建立7級緩存,每級緩存65536個單元,分別對應(yīng)大小為1?8、9?128、129?IK、lk以上?8K、8k以上?64K、64k以上?1M和1M以上字節(jié)的內(nèi)存塊。
[0047]S20,根據(jù)待檢測內(nèi)存塊的大小和地址計算緩存總位置索引;根據(jù)內(nèi)存信息計算分級緩存索引;例如,首先可根據(jù)內(nèi)存塊大小選擇緩存級別,小于等于8字節(jié)的內(nèi)存塊屬于第一級緩存,大小大于8字節(jié)小于128字節(jié)的內(nèi)存塊屬于第二級緩存......其它內(nèi)存塊選擇方式以此類推。然后將待檢測內(nèi)存地址右移位若干位再與0XFFFF相與,獲得的值就是其級索引。右移的位數(shù)與所處緩存級別相關(guān),第一級到第七級依次移3、7、10、13、16、20、20位。最后,根據(jù)級索引加上所處級起始位置得到緩存總位置索引。緩存總位置索引指向緩存中的某個緩存單元。
[0048]S30,當(dāng)程序訪問內(nèi)存時,根據(jù)緩存總位置索引尋址分級緩存單元,判斷是否可從該分級緩存單元中讀出內(nèi)存塊的地址信息,若是,則執(zhí)行步驟S40,若否,則執(zhí)行步驟S50 ;
[0049]S40,結(jié)合本次內(nèi)存訪問的范圍判斷本次訪問是否需要使用插樁式內(nèi)存檢測工具進(jìn)行檢測;
[0050]S50,通過插樁式內(nèi)存檢測工具判斷本次訪問是否合法,并在訪問合法時向分級緩存單元中填入內(nèi)存塊的地址信息。
[0051 ] 本發(fā)明實施例中,內(nèi)存塊的地址信息是指本次訪問的內(nèi)存塊的起始地址和結(jié)束地址。程序第一次訪問內(nèi)存時,由于緩存單元中事先未保存內(nèi)存塊的地址信息,因此,讀取結(jié)果為空。此時,訪問是否合法(例如數(shù)組是否溢出越界等)通過常規(guī)手段(例如插樁式內(nèi)存檢測工具等)來完成。當(dāng)通過插樁式內(nèi)存檢測工具判斷訪問合法時,向分級緩存單元中填入內(nèi)存塊的地址信息。在程序第二次直至后續(xù)的訪問過程中,可根據(jù)從分級緩存單元中讀出的內(nèi)存塊的地址信息,結(jié)合本次內(nèi)存訪問的范圍快速判斷本次訪問是否合法。
[0052]本發(fā)明利用程序的局部性原理,在某段內(nèi)存第一次訪問檢查合法后將內(nèi)存地址信息緩存起來,后續(xù)再訪問這段內(nèi)存時直接從緩存中讀取內(nèi)存地址信息,從而對合法內(nèi)存訪問完成快速判斷,避免了現(xiàn)有的內(nèi)存訪問合法性檢測技術(shù)在每次訪問內(nèi)存時都需要通過插樁式內(nèi)存檢測工具進(jìn)行合法性檢查,提升了內(nèi)存訪問合法性檢測效率和軟件性能。
[0053]參見圖2所示,本發(fā)明一實施例中,前述步驟S20包括:
[0054]S21,根據(jù)內(nèi)存塊大小選擇緩存級別;例如,首先可根據(jù)內(nèi)存塊大小選擇緩存級別,小于等于8字節(jié)的內(nèi)存塊屬于第一級緩存,大小大于8字節(jié)小于128字節(jié)的內(nèi)存塊屬于第二級緩存......其它內(nèi)存塊選擇方式以此類推。
[0055]S22,根據(jù)待檢測的內(nèi)存塊的地址信息計算對應(yīng)在本級的級位置索引;例如,將待檢測內(nèi)存地址右移位若干位,然后與0XFFFF相與,獲得的值就是其級索引。右移的位數(shù)與所處緩存級別相關(guān),第一級到第七級依次移3、7、10、13、16、20、20位。
[0056]S23,將所述級位置索引加上所處級的起始位置得到緩存總位置索引。例如,根據(jù)級索引加上所處級起始位置得到緩存總位置索引。緩存總位置索引指向緩存中的某個緩存單元。
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
扶余县| 永新县| 长乐市| 托里县| 察隅县| 瑞丽市| 肥东县| 嘉鱼县| 康定县| 商都县| 青州市| 华安县| 镇江市| 新闻| 柯坪县| 确山县| 体育| 吴堡县| 高台县| 大兴区| 时尚| 博客| 遵义县| 马尔康县| 滦平县| 安徽省| 五台县| 泰来县| 双辽市| 越西县| 吉林市| 宁乡县| 彩票| 景宁| 孝感市| 孙吴县| 勐海县| 茶陵县| 长春市| 保靖县| 庆城县|