亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

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

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

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

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