專利名稱:一種檢測(cè)內(nèi)存訪問(wèn)越界的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于嵌入式系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種檢測(cè)內(nèi)存訪問(wèn)越界的方法及裝置。
背景技術(shù):
目前的嵌入式實(shí)時(shí)系統(tǒng)中,應(yīng)用程序?qū)?nèi)存的使用頻率相當(dāng)高,尤其是需要頻繁地申請(qǐng)和釋放內(nèi)存,但由于嵌入式系統(tǒng)的資源比較受限,因而有效的使用內(nèi)存顯得尤為重要,如何利用有限的內(nèi)存發(fā)揮最大的使用效率,成為了嵌入式系統(tǒng)進(jìn)一步發(fā)展的問(wèn)題關(guān)鍵。在實(shí)際應(yīng)用過(guò)程中,通常會(huì)由于不恰當(dāng)?shù)膬?nèi)存操作阻礙內(nèi)存的使用,比如“內(nèi)存訪問(wèn)越界”便是一種常見(jiàn)的不合法內(nèi)存操作。很多情況下,由于程序代碼編寫上的疏忽,會(huì)造成內(nèi)存訪問(wèn)越界的問(wèn)題,例如,寫入數(shù)據(jù)時(shí)超出了所申請(qǐng)內(nèi)存塊的地址范圍,覆蓋了其他內(nèi)存區(qū)域,便可能造成內(nèi)存訪問(wèn)越界的狀況。由于內(nèi)存訪問(wèn)越界可能會(huì)覆蓋運(yùn)行中的程序的數(shù)據(jù),甚至覆蓋程序代碼,因而極有可能破壞到程序中正在使用的其他數(shù)據(jù),嚴(yán)重的時(shí)候還可能對(duì)其他正在運(yùn)行的程序或者整個(gè)系統(tǒng)造成影響,如果操作系統(tǒng)缺少保護(hù),甚至有可能使整個(gè)系統(tǒng)崩潰;同時(shí),由于內(nèi)存訪問(wèn)越界影響其他數(shù)據(jù)的訪問(wèn),會(huì)降低嵌入式系統(tǒng)中有限內(nèi)存的使用效率。
發(fā)明內(nèi)容
本發(fā)明提供了一種檢測(cè)內(nèi)存訪問(wèn)越界的方法及裝置,旨在解決現(xiàn)有技術(shù)中由于內(nèi)存訪問(wèn)越界造成影響程序及系統(tǒng)運(yùn)行、降低內(nèi)存使用效率的問(wèn)題。本發(fā)明是這樣實(shí)現(xiàn)的,一種檢測(cè)內(nèi)存訪問(wèn)越界的方法,包括步驟a 申請(qǐng)內(nèi)存塊時(shí)在所申請(qǐng)內(nèi)存塊的尾部添加固定長(zhǎng)度的檢測(cè)字段;
步驟b 進(jìn)行內(nèi)存塊操作時(shí),逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值是初始設(shè)置值,提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常;如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,執(zhí)行步驟C;步驟c 提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象。本發(fā)明的技術(shù)方案還包括在所述步驟a中,所述檢測(cè)字段的數(shù)值默認(rèn)設(shè)置為容易被檢測(cè)的數(shù)值。本發(fā)明的技術(shù)方案還包括所述步驟a還包括,將所申請(qǐng)內(nèi)存塊的長(zhǎng)度分配為該內(nèi)存塊的初始申請(qǐng)長(zhǎng)度加上該內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段長(zhǎng)度。本發(fā)明的技術(shù)方案還包括所述步驟a還包括,將分配好的內(nèi)存塊接入內(nèi)存鏈表中,并返回每個(gè)內(nèi)存塊對(duì)應(yīng)的初始地址。本發(fā)明的技術(shù)方案還包括所述步驟a還包括,在所申請(qǐng)內(nèi)存塊的頭部添加固定長(zhǎng)度的頭部檢測(cè)字段,并將該頭部檢測(cè)字段的數(shù)值默認(rèn)設(shè)置為容易被檢測(cè)的數(shù)值。本發(fā)明的技術(shù)方案還包括所述步驟a還包括,將所申請(qǐng)內(nèi)存塊的長(zhǎng)度分配為該內(nèi)存塊的初始申請(qǐng)長(zhǎng)度加上該內(nèi)存塊對(duì)應(yīng)的頭部檢測(cè)字段長(zhǎng)度及尾部檢測(cè)字段長(zhǎng)度。本發(fā)明的技術(shù)方案還包括所述步驟c后還包括,逐一檢測(cè)每一個(gè)內(nèi)存塊的頭部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的頭部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果頭部檢測(cè)字段的數(shù)值不是初始設(shè)置值,提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作正常,并繼續(xù)判斷下一個(gè)內(nèi)存塊的頭部檢測(cè)字段;如果頭部檢測(cè)字段的數(shù)值是初始設(shè)置值,提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作不當(dāng)。本發(fā)明的另一技術(shù)方案一種檢測(cè)內(nèi)存訪問(wèn)越界的裝置,包括內(nèi)存申請(qǐng)模塊、地址返回模塊、內(nèi)存設(shè)置模塊、第一內(nèi)存判斷模塊和狀態(tài)提示模塊,所述內(nèi)存申請(qǐng)模塊用于為需要使用的程序申請(qǐng)內(nèi)存塊,所述地址返回模塊用于將分配好的內(nèi)存塊接入內(nèi)存鏈表中,并返回每個(gè)內(nèi)存塊對(duì)應(yīng)的初始地址,所述內(nèi)存設(shè)置模塊用于在所申請(qǐng)內(nèi)存塊的尾部添加固定長(zhǎng)度的檢測(cè)字段,所述第一內(nèi)存判斷模塊用于逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值為初始設(shè)置值,通過(guò)狀態(tài)提示模塊提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常;如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,通過(guò)狀態(tài)提示模塊提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象;所述狀態(tài)提示模塊用于根據(jù)第一內(nèi)存判斷模塊的判斷結(jié)果進(jìn)行相應(yīng)的內(nèi)存狀態(tài)提示。本發(fā)明的技術(shù)方案還包括還包括第二內(nèi)存判斷模塊和操作提示模塊,所述第二內(nèi)存判斷模塊用于逐一檢測(cè)每一個(gè)內(nèi)存塊的頭部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的頭部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果頭部檢測(cè)字段的數(shù)值不是初始設(shè)置值,通過(guò)操作提示模塊提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作正常;如果頭部檢測(cè)字段的數(shù)值是初始設(shè)置值,通過(guò)操作提示模塊提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作不當(dāng);所述操作提示模塊用于根據(jù)第二內(nèi)存判斷模塊的判斷結(jié)果進(jìn)行相應(yīng)的提示。本發(fā)明的技術(shù)方案還包括還包括內(nèi)存分配模塊,所述內(nèi)存分配模塊用于將所申請(qǐng)內(nèi)存塊的長(zhǎng)度分配為該內(nèi)存塊的初始申請(qǐng)長(zhǎng)度加上該內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段長(zhǎng)度或/和頭部檢測(cè)字段長(zhǎng)度。本發(fā)明的技術(shù)方案具有如下優(yōu)點(diǎn)或有益效果本發(fā)明檢測(cè)內(nèi)存訪問(wèn)越界的方法及裝置通過(guò)在申請(qǐng)分配內(nèi)存塊時(shí),自動(dòng)在分配的內(nèi)存塊的頭部及尾部添加設(shè)置初始默認(rèn)值的檢測(cè)字段,當(dāng)對(duì)內(nèi)存塊進(jìn)行相應(yīng)操作時(shí),分別對(duì)尾部和頭部檢測(cè)字段進(jìn)行檢測(cè),從而快速有效地檢測(cè)出內(nèi)存訪問(wèn)越界的現(xiàn)象,并進(jìn)一步檢測(cè)出造成內(nèi)存訪問(wèn)越界現(xiàn)象的原因,使得嵌入式系統(tǒng)中不恰當(dāng)?shù)膬?nèi)存越界操作能夠及時(shí)被發(fā)現(xiàn)和進(jìn)行針對(duì)性地維護(hù)操作,從而加強(qiáng)對(duì)系統(tǒng)內(nèi)存數(shù)據(jù)的保護(hù)強(qiáng)度,提高嵌入式系統(tǒng)中有限內(nèi)存的使用效率。
附圖1是本發(fā)明第一實(shí)施例的檢測(cè)內(nèi)存訪問(wèn)越界的方法的流程圖;附圖2是本發(fā)明第二實(shí)施例的檢測(cè)內(nèi)存訪問(wèn)越界的方法的流程圖;附圖3是本發(fā)明第三實(shí)施例的檢測(cè)內(nèi)存訪問(wèn)越界的方法的流程圖;附圖4是本發(fā)明第一實(shí)施例的檢測(cè)內(nèi)存訪問(wèn)越界的裝置的結(jié)構(gòu)示意圖;附圖5是本發(fā)明第二實(shí)施例的檢測(cè)內(nèi)存訪問(wèn)越界的裝置的結(jié)構(gòu)示意圖;附圖6是本發(fā)明第三實(shí)施例的檢測(cè)內(nèi)存訪問(wèn)越界的裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。請(qǐng)參閱圖1,是本發(fā)明第一實(shí)施例的檢測(cè)內(nèi)存訪問(wèn)越界的方法的流程圖。本發(fā)明第一實(shí)施例的檢測(cè)內(nèi)存訪問(wèn)越界的方法包括以下步驟步驟100 申請(qǐng)內(nèi)存塊時(shí)在所申請(qǐng)內(nèi)存塊的尾部添加固定長(zhǎng)度的檢測(cè)字段;該步驟中,為了便于檢測(cè),該檢測(cè)字段的數(shù)值默認(rèn)設(shè)置為容易被檢測(cè)的數(shù)值;可將檢測(cè)字段的每一位數(shù)值設(shè)置為同樣的值,以檢測(cè)字段的長(zhǎng)度為4bit為例,可以將該4位字段的檢測(cè)字段設(shè)置為FFFF或者1111 ;其中,可將所有內(nèi)存塊的檢測(cè)字段設(shè)置為統(tǒng)一值,也可將每一個(gè)內(nèi)存塊的檢測(cè)字段區(qū)分設(shè)置。步驟110 進(jìn)行內(nèi)存塊操作時(shí),逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值是初始設(shè)置值,執(zhí)行步驟120 ;如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,執(zhí)行步驟130 ;該步驟中,具體的檢測(cè)方法為為保證日常代碼的健壯性,可以在任何一個(gè)有內(nèi)存申請(qǐng)和釋放或者對(duì)內(nèi)存進(jìn)行其他操作的接口里進(jìn)行內(nèi)存越界的檢測(cè),即將檢測(cè)函數(shù)插入至 malloc.free.memcpy等相應(yīng)類別的內(nèi)存申請(qǐng)或釋放函數(shù)中,在每次調(diào)用內(nèi)存申請(qǐng)或釋放函數(shù)時(shí),檢測(cè)內(nèi)存鏈表中內(nèi)存塊的尾部檢測(cè)字段是否為初始設(shè)置值,由于檢測(cè)字段的初始設(shè)置值的特殊性,且由于內(nèi)存塊的初始申請(qǐng)長(zhǎng)度通常相對(duì)實(shí)際應(yīng)用會(huì)有所盈余,因而如果檢測(cè)到尾部檢測(cè)字段的數(shù)值并非初始設(shè)置值時(shí),與該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊便極有可能存在內(nèi)存訪問(wèn)越界的現(xiàn)象,如果檢測(cè)到尾部檢測(cè)字段的數(shù)值為初始設(shè)置值時(shí),則說(shuō)明該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常。其中,設(shè)置的檢測(cè)字段越長(zhǎng)時(shí),檢測(cè)的可靠性越高,但如果太長(zhǎng)會(huì)造成內(nèi)存浪費(fèi)的現(xiàn)象,在本發(fā)明實(shí)施方式中,檢測(cè)字段的長(zhǎng)度設(shè)置為4bit時(shí)為最佳方案。步驟120 提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常;步驟130 提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象。請(qǐng)參閱圖2,是本發(fā)明第二實(shí)施例的的檢測(cè)內(nèi)存訪問(wèn)越界的方法的流程圖。本發(fā)明第二實(shí)施例的檢測(cè)內(nèi)存訪問(wèn)越界的方法包括以下步驟步驟200 為需要使用的程序申請(qǐng)內(nèi)存塊;步驟210 在所申請(qǐng)內(nèi)存塊的尾部添加固定長(zhǎng)度的檢測(cè)字段,并將該檢測(cè)字段的數(shù)值默認(rèn)設(shè)置為容易被檢測(cè)的數(shù)值;該步驟中,為了便于檢測(cè),可將檢測(cè)字段的每一位數(shù)值設(shè)置為同樣的值,以檢測(cè)字段的長(zhǎng)度為4bit為例,可以將該4位字段的檢測(cè)字段設(shè)置為FFFF或者1111 ;其中,可將所有內(nèi)存塊的檢測(cè)字段設(shè)置為統(tǒng)一值,也可將每一個(gè)內(nèi)存塊的檢測(cè)字段區(qū)分設(shè)置。步驟220 將所申請(qǐng)內(nèi)存塊的長(zhǎng)度分配為該內(nèi)存塊的初始申請(qǐng)長(zhǎng)度加上該內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段長(zhǎng)度;該步驟中,假設(shè)內(nèi)存塊的初始申請(qǐng)長(zhǎng)度為M,所添加的檢測(cè)字段長(zhǎng)度為N,那么該申請(qǐng)內(nèi)存塊的長(zhǎng)度則自動(dòng)分配為M+N。
步驟230 將分配好的內(nèi)存塊接入內(nèi)存鏈表中,并返回每個(gè)內(nèi)存塊對(duì)應(yīng)的初始地址;其中,返回的初始地址為實(shí)際分配的內(nèi)存塊的初始地址,即初始申請(qǐng)長(zhǎng)度(M)的內(nèi)存塊的初始地址。步驟MO 進(jìn)行內(nèi)存塊操作時(shí),逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值為初始設(shè)置值,執(zhí)行步驟250 ;如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,執(zhí)行步驟沈0 ;該步驟中,具體的檢測(cè)方法為為保證日常代碼的健壯性,可以在任何一個(gè)有內(nèi)存申請(qǐng)和釋放或者對(duì)內(nèi)存進(jìn)行其他操作的接口里進(jìn)行內(nèi)存越界的檢測(cè),即將檢測(cè)函數(shù)插入至 malloc.free.memcpy等相應(yīng)類別的內(nèi)存申請(qǐng)或釋放函數(shù)中,在每次調(diào)用內(nèi)存申請(qǐng)或釋放函數(shù)時(shí),檢測(cè)內(nèi)存鏈表中內(nèi)存塊的尾部檢測(cè)字段是否為初始設(shè)置值,由于檢測(cè)字段的初始設(shè)置值的特殊性,且由于內(nèi)存塊的初始申請(qǐng)長(zhǎng)度通常相對(duì)實(shí)際應(yīng)用會(huì)有所盈余,因而如果檢測(cè)到尾部檢測(cè)字段的數(shù)值并非初始設(shè)置值時(shí),與該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊便極有可能存在內(nèi)存訪問(wèn)越界的現(xiàn)象,如果檢測(cè)到尾部檢測(cè)字段的數(shù)值為初始設(shè)置值時(shí),則說(shuō)明該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常。其中,設(shè)置的檢測(cè)字段越長(zhǎng)時(shí),檢測(cè)的可靠性越高,但如果太長(zhǎng)會(huì)造成內(nèi)存浪費(fèi)的現(xiàn)象,在本發(fā)明實(shí)施方式中,檢測(cè)字段的長(zhǎng)度設(shè)置為4bit時(shí)為最佳方案。步驟250 提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常,并重新執(zhí)行步驟 240 ;步驟沈0 提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象;步驟270 結(jié)束本次檢測(cè)。請(qǐng)參閱圖3,是本發(fā)明第三實(shí)施例的的檢測(cè)內(nèi)存訪問(wèn)越界的方法的流程圖。本發(fā)明第三實(shí)施例的檢測(cè)內(nèi)存訪問(wèn)越界的方法包括以下步驟步驟300 為需要使用的程序申請(qǐng)內(nèi)存塊;步驟310 在所申請(qǐng)內(nèi)存塊的頭部及尾部分別添加固定長(zhǎng)度的頭部檢測(cè)字段和尾部檢測(cè)字段,并將該檢測(cè)字段的數(shù)值默認(rèn)設(shè)置為容易被檢測(cè)的數(shù)值;該步驟中,為了便于檢測(cè),可將檢測(cè)字段的每一位數(shù)值設(shè)置為同樣的值,以檢測(cè)字段的長(zhǎng)度為4bit為例,可以將該4位字段的檢測(cè)字段設(shè)置為FFFF或者1111 ;其中,可將所有內(nèi)存塊的檢測(cè)字段設(shè)置為統(tǒng)一值,也可將每一個(gè)內(nèi)存塊的頭部檢測(cè)字段和尾部檢測(cè)字段區(qū)分設(shè)置。步驟320 將所申請(qǐng)內(nèi)存塊的長(zhǎng)度分配為該內(nèi)存塊的初始申請(qǐng)長(zhǎng)度加上該內(nèi)存塊對(duì)應(yīng)的頭部檢測(cè)字段長(zhǎng)度及尾部檢測(cè)字段長(zhǎng)度;該步驟中,假設(shè)內(nèi)存塊的初始申請(qǐng)長(zhǎng)度為M,所添加的頭部檢測(cè)字段長(zhǎng)度為Ni,所添加的尾部檢測(cè)字段長(zhǎng)度為N2,那么該申請(qǐng)內(nèi)存塊的長(zhǎng)度則自動(dòng)分配為M+N1+N2。步驟330 將分配好的內(nèi)存塊接入內(nèi)存鏈表中,并返回每個(gè)對(duì)應(yīng)內(nèi)存塊對(duì)應(yīng)的初始地址;其中,返回的初始地址為實(shí)際分配的內(nèi)存塊的初始地址(M)加上頭部檢測(cè)字段長(zhǎng)度(Ni)后的地址。步驟340 進(jìn)行內(nèi)存塊操作時(shí),逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值為初始設(shè)置值,執(zhí)行步驟350 ;如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,執(zhí)行步驟360 ;該步驟中,具體的檢測(cè)方法為為保證日常代碼的健壯性,可以在任何一個(gè)有內(nèi)存申請(qǐng)和釋放或者對(duì)內(nèi)存進(jìn)行其他操作的接口里進(jìn)行內(nèi)存越界的檢測(cè),即將檢測(cè)函數(shù)插入至 malloc.free.memcpy等相應(yīng)類別的內(nèi)存申請(qǐng)或釋放函數(shù)中,在每次調(diào)用內(nèi)存申請(qǐng)或釋放函數(shù)時(shí),檢測(cè)內(nèi)存鏈表中內(nèi)存塊的尾部檢測(cè)字段是否為初始設(shè)置值,由于檢測(cè)字段的初始設(shè)置值的特殊性,且由于內(nèi)存塊的初始申請(qǐng)長(zhǎng)度通常相對(duì)實(shí)際應(yīng)用會(huì)有所盈余,因而如果檢測(cè)到尾部檢測(cè)字段的數(shù)值并非初始設(shè)置值時(shí),與該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊便極有可能存在內(nèi)存訪問(wèn)越界的現(xiàn)象,如果檢測(cè)到尾部檢測(cè)字段的數(shù)值為初始設(shè)置值時(shí),則說(shuō)明該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常。其中,設(shè)置的檢測(cè)字段越長(zhǎng)時(shí),檢測(cè)的可靠性越高,但如果太長(zhǎng)會(huì)造成內(nèi)存浪費(fèi)的現(xiàn)象,在本發(fā)明實(shí)施方式中,檢測(cè)字段的長(zhǎng)度設(shè)置為4bit時(shí)為最佳方案。步驟350 提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常,并重新執(zhí)行步340 ;步驟360 提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象;步驟370 逐一檢測(cè)每一個(gè)內(nèi)存塊的頭部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的頭部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果頭部檢測(cè)字段的數(shù)值不是初始設(shè)置值,執(zhí)行步驟380 ;如果頭部檢測(cè)字段的數(shù)值是初始設(shè)置值,執(zhí)行步驟390 ;該步驟中,例如檢測(cè)到內(nèi)存塊3的尾部檢測(cè)字段與初始設(shè)置值不相同,可以判斷該內(nèi)存塊3發(fā)生了內(nèi)存訪問(wèn)越界現(xiàn)象,但是此時(shí)并不能得知具體是由于哪一個(gè)內(nèi)存塊的寫操作不當(dāng)造成的“越界”現(xiàn)象,此時(shí)可以進(jìn)一步檢測(cè)內(nèi)存塊3的頭部檢測(cè)字段,若內(nèi)存塊3 的頭部檢測(cè)字段并沒(méi)有發(fā)現(xiàn)異常,可以斷定此“越界”現(xiàn)象是由于對(duì)內(nèi)存塊3的寫操作不當(dāng)而造成的,而若檢測(cè)內(nèi)存塊3的頭部檢測(cè)字段與初始設(shè)置值不同,則可以斷定該“越界”現(xiàn)象至少是由于對(duì)內(nèi)存塊2或是內(nèi)存塊1的寫操作不當(dāng)而造成的,同理,通過(guò)依次對(duì)內(nèi)存塊2 的尾部、頭部檢測(cè)字段,以及內(nèi)存塊1的尾部、頭部檢測(cè)字段進(jìn)行檢測(cè),從而進(jìn)一步檢測(cè)出該“越界”現(xiàn)象發(fā)生的緣由,從而可以有針對(duì)性地進(jìn)行維護(hù)操作。步驟380 提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作正常,并重新執(zhí)行步驟370 ;步驟390 提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作不當(dāng);步驟400 結(jié)束本次檢測(cè)。請(qǐng)參閱圖4,是本發(fā)明第一實(shí)施例的的檢測(cè)內(nèi)存訪問(wèn)越界的裝置的結(jié)構(gòu)示意圖。本發(fā)明第一實(shí)施例的的檢測(cè)內(nèi)存訪問(wèn)越界的裝置包括內(nèi)存申請(qǐng)模塊、地址返回模塊、內(nèi)存設(shè)置模塊、第一內(nèi)存判斷模塊和狀態(tài)提示模塊,其中,內(nèi)存申請(qǐng)模塊用于為需要使用的程序申請(qǐng)內(nèi)存塊;地址返回模塊用于將分配好的內(nèi)存塊接入內(nèi)存鏈表中,并返回每個(gè)內(nèi)存塊對(duì)應(yīng)的初始地址;內(nèi)存設(shè)置模塊用于在所申請(qǐng)內(nèi)存塊的尾部添加固定長(zhǎng)度的檢測(cè)字段;其中,為了便于檢測(cè),可將檢測(cè)字段的每一位數(shù)值設(shè)置為同樣的值,以檢測(cè)字段的長(zhǎng)度為4bit為例, 可以將該4位字段的檢測(cè)字段設(shè)置為FFFF或者1111 ;另外,可將所有內(nèi)存塊的檢測(cè)字段設(shè)置為統(tǒng)一值,也可將每一個(gè)內(nèi)存塊的檢測(cè)字段區(qū)分設(shè)置。第一內(nèi)存判斷模塊用于逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值為初始設(shè)置值,通過(guò)狀態(tài)提示模塊提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常;如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,通過(guò)狀態(tài)提示模塊提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象;其中,具體的檢測(cè)方法為為保證日常代碼的健壯性,可以在任何一個(gè)有內(nèi)存申請(qǐng)和釋放或者對(duì)內(nèi)存進(jìn)行其他操作的接口里進(jìn)行內(nèi)存越界的檢測(cè),即將檢測(cè)函數(shù)插入至malloc、free, memcpy等相應(yīng)類別的內(nèi)存申請(qǐng)或釋放函數(shù)中,在每次調(diào)用內(nèi)存申請(qǐng)或釋放函數(shù)時(shí),檢測(cè)內(nèi)存鏈表中內(nèi)存塊的尾部檢測(cè)字段是否為初始設(shè)置值,由于檢測(cè)字段的初始設(shè)置值的特殊性,且由于內(nèi)存塊的初始申請(qǐng)長(zhǎng)度通常相對(duì)實(shí)際應(yīng)用會(huì)有所盈余,因而如果檢測(cè)到尾部檢測(cè)字段的數(shù)值并非初始設(shè)置值時(shí),與該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊便極有可能存在內(nèi)存訪問(wèn)越界的現(xiàn)象,如果檢測(cè)到尾部檢測(cè)字段的數(shù)值為初始設(shè)置值時(shí),則說(shuō)明該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常。其中,設(shè)置的檢測(cè)字段越長(zhǎng)時(shí),檢測(cè)的可靠性越高, 但如果太長(zhǎng)會(huì)造成內(nèi)存浪費(fèi)的現(xiàn)象,在本發(fā)明實(shí)施方式中,檢測(cè)字段的長(zhǎng)度設(shè)置為4bit時(shí)為最佳方案。狀態(tài)提示模塊用于根據(jù)第一內(nèi)存判斷模塊的判斷結(jié)果進(jìn)行相應(yīng)的內(nèi)存狀態(tài)提示。請(qǐng)參閱圖5,是本發(fā)明第二實(shí)施例的的檢測(cè)內(nèi)存訪問(wèn)越界的裝置的結(jié)構(gòu)示意圖。本發(fā)明第二實(shí)施例的的檢測(cè)內(nèi)存訪問(wèn)越界的裝置包括內(nèi)存申請(qǐng)模塊、內(nèi)存設(shè)置模塊、內(nèi)存分配模塊、地址返回模塊、第一內(nèi)存判斷模塊和狀態(tài)提示模塊,其中內(nèi)存申請(qǐng)模塊用于為需要使用的程序申請(qǐng)內(nèi)存塊;內(nèi)存設(shè)置模塊用于在所申請(qǐng)內(nèi)存塊的尾部添加固定長(zhǎng)度的檢測(cè)字段,并將該檢測(cè)字段的數(shù)值默認(rèn)設(shè)置為容易被檢測(cè)的數(shù)值;其中,為了便于檢測(cè),可將檢測(cè)字段的每一位數(shù)值設(shè)置為同樣的值,以檢測(cè)字段的長(zhǎng)度為4bit為例,可以將該4位字段的檢測(cè)字段設(shè)置為 FFFF或者1111 ;另外,可將所有內(nèi)存塊的檢測(cè)字段設(shè)置為統(tǒng)一值,也可將每一個(gè)內(nèi)存塊的檢測(cè)字段區(qū)分設(shè)置。內(nèi)存分配模塊用于將所申請(qǐng)內(nèi)存塊的長(zhǎng)度分配為該內(nèi)存塊的初始申請(qǐng)長(zhǎng)度加上該內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段長(zhǎng)度;其中,假設(shè)內(nèi)存塊的初始申請(qǐng)長(zhǎng)度為M,所添加的檢測(cè)字段長(zhǎng)度為N,那么該申請(qǐng)內(nèi)存塊的長(zhǎng)度則自動(dòng)分配為M+N。地址返回模塊用于將分配好的內(nèi)存塊接入內(nèi)存鏈表中,并返回每個(gè)內(nèi)存塊對(duì)應(yīng)的初始地址;其中,返回的初始地址為實(shí)際分配的內(nèi)存塊的初始地址,即初始申請(qǐng)長(zhǎng)度(M)的內(nèi)存塊的初始地址。第一內(nèi)存判斷模塊用于逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值為初始設(shè)置值,通過(guò)狀態(tài)提示模塊提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常;如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,通過(guò)狀態(tài)提示模塊提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象;其中,具體的檢測(cè)方法為為保證日常代碼的健壯性,可以在任何一個(gè)有內(nèi)存申請(qǐng)和釋放或者對(duì)內(nèi)存進(jìn)行其他操作的接口里進(jìn)行內(nèi)存越界的檢測(cè),即將檢測(cè)函數(shù)插入至 malloc,free.memcpy等相應(yīng)類別的內(nèi)存申請(qǐng)或釋放函數(shù)中,在每次調(diào)用內(nèi)存申請(qǐng)或釋放函數(shù)時(shí),檢測(cè)內(nèi)存鏈表中內(nèi)存塊的尾部檢測(cè)字段是否為初始設(shè)置值,由于檢測(cè)字段的初始設(shè)置值的特殊性,且由于內(nèi)存塊的初始申請(qǐng)長(zhǎng)度通常相對(duì)實(shí)際應(yīng)用會(huì)有所盈余,因而如果檢測(cè)到尾部檢測(cè)字段的數(shù)值并非初始設(shè)置值時(shí),與該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊便極有可能存在內(nèi)存訪問(wèn)越界的現(xiàn)象,如果檢測(cè)到尾部檢測(cè)字段的數(shù)值為初始設(shè)置值時(shí),則說(shuō)明該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常。其中,設(shè)置的檢測(cè)字段越長(zhǎng)時(shí),檢測(cè)的可靠性越高,但如果太長(zhǎng)會(huì)造成內(nèi)存浪費(fèi)的現(xiàn)象,在本發(fā)明實(shí)施方式中,檢測(cè)字段的長(zhǎng)度設(shè)置為4bit時(shí)為最佳方案。狀態(tài)提示模塊用于根據(jù)第一內(nèi)存判斷模塊的判斷結(jié)果進(jìn)行相應(yīng)的內(nèi)存狀態(tài)提示。請(qǐng)參閱圖6,是本發(fā)明第三實(shí)施例的的檢測(cè)內(nèi)存訪問(wèn)越界的裝置的結(jié)構(gòu)示意圖。本發(fā)明第三實(shí)施例的的檢測(cè)內(nèi)存訪問(wèn)越界的裝置包括內(nèi)存申請(qǐng)模塊、內(nèi)存設(shè)置模塊、內(nèi)存分配模塊、地址返回模塊、第一內(nèi)存判斷模塊、狀態(tài)提示模塊、第二內(nèi)存判斷模塊和操作提示模塊,其中內(nèi)存申請(qǐng)模塊用于為需要使用的程序申請(qǐng)內(nèi)存塊;內(nèi)存設(shè)置模塊用于在所申請(qǐng)內(nèi)存塊的頭部及尾部分別添加固定長(zhǎng)度的頭部檢測(cè)字段和尾部檢測(cè)字段,并將該檢測(cè)字段的數(shù)值默認(rèn)設(shè)置為容易被檢測(cè)的數(shù)值;其中,為了便于檢測(cè),可將檢測(cè)字段的每一位數(shù)值設(shè)置為同樣的值,以檢測(cè)字段的長(zhǎng)度為4bit為例,可以將該4位字段的檢測(cè)字段設(shè)置為FFFF或者1111 ;另外,可將所有內(nèi)存塊的檢測(cè)字段設(shè)置為統(tǒng)一值,也可將每一個(gè)內(nèi)存塊的頭部檢測(cè)字段和尾部檢測(cè)字段區(qū)分設(shè)置。內(nèi)存分配模塊用于將所申請(qǐng)內(nèi)存塊的長(zhǎng)度分配為該內(nèi)存塊的初始申請(qǐng)長(zhǎng)度加上該內(nèi)存塊對(duì)應(yīng)的頭部檢測(cè)字段長(zhǎng)度及尾部檢測(cè)字段長(zhǎng)度;其中,假設(shè)內(nèi)存塊的初始申請(qǐng)長(zhǎng)度為M,所添加的頭部檢測(cè)字段長(zhǎng)度為Ni,所添加的尾部檢測(cè)字段長(zhǎng)度為N2,那么該申請(qǐng)內(nèi)存塊的長(zhǎng)度則自動(dòng)分配為M+N1+N2。地址返回模塊用于將分配好的內(nèi)存塊接入內(nèi)存鏈表中,并返回每個(gè)內(nèi)存塊對(duì)應(yīng)的初始地址;其中,返回的初始地址為實(shí)際分配的內(nèi)存塊的初始地址(M)加上頭部檢測(cè)字段長(zhǎng)度(Ni)后的地址。第一內(nèi)存判斷模塊用于逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值為初始設(shè)置值,通過(guò)狀態(tài)提示模塊提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常;如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,通過(guò)狀態(tài)提示模塊提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象;其中,具體的檢測(cè)方法為為保證日常代碼的健壯性,可以在任何一個(gè)有內(nèi)存申請(qǐng)和釋放或者對(duì)內(nèi)存進(jìn)行其他操作的接口里進(jìn)行內(nèi)存越界的檢測(cè),即將檢測(cè)函數(shù)插入至 malloc.free.memcpy等相應(yīng)類別的內(nèi)存申請(qǐng)或釋放函數(shù)中,在每次調(diào)用內(nèi)存申請(qǐng)或釋放函數(shù)時(shí),檢測(cè)內(nèi)存鏈表中內(nèi)存塊的尾部檢測(cè)字段是否為初始設(shè)置值,由于檢測(cè)字段的初始設(shè)置值的特殊性,且由于內(nèi)存塊的初始申請(qǐng)長(zhǎng)度通常相對(duì)實(shí)際應(yīng)用會(huì)有所盈余,因而如果檢測(cè)到尾部檢測(cè)字段的數(shù)值并非初始設(shè)置值時(shí),與該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊便極有可能存在內(nèi)存訪問(wèn)越界的現(xiàn)象,如果檢測(cè)到尾部檢測(cè)字段的數(shù)值為初始設(shè)置值時(shí),則說(shuō)明該檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常。其中,設(shè)置的檢測(cè)字段越長(zhǎng)時(shí),檢測(cè)的可靠性越高,但如果太長(zhǎng)會(huì)造成內(nèi)存浪費(fèi)的現(xiàn)象,在本發(fā)明實(shí)施方式中,檢測(cè)字段的長(zhǎng)度設(shè)置為4bit時(shí)為最佳方案。狀態(tài)提示模塊用于根據(jù)第一內(nèi)存判斷模塊的判斷結(jié)果進(jìn)行相應(yīng)的內(nèi)存狀態(tài)提不;第二內(nèi)存判斷模塊用于逐一檢測(cè)每一個(gè)內(nèi)存塊的頭部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的頭部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果頭部檢測(cè)字段的數(shù)值不是初始設(shè)置值,通過(guò)操作提示模塊提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作正常;如果頭部檢測(cè)字段的數(shù)值是初始設(shè)置值,通過(guò)操作提示模塊提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作不當(dāng);其中,例如檢測(cè)到內(nèi)存塊3的尾部檢測(cè)字段與初始設(shè)置值不相同,可以判斷該內(nèi)存塊3發(fā)生了內(nèi)存訪問(wèn)越界現(xiàn)象,但是此時(shí)并不能得知具體是由于哪一個(gè)內(nèi)存塊的寫操作不當(dāng)造成的“越界”現(xiàn)象,此時(shí)可以進(jìn)一步檢測(cè)內(nèi)存塊3的頭部檢測(cè)字段,若內(nèi)存塊3的頭部檢測(cè)字段并沒(méi)有發(fā)現(xiàn)異常,可以斷定此“越界”現(xiàn)象是由于對(duì)內(nèi)存塊3的寫操作不當(dāng)而造成的,而若檢測(cè)內(nèi)存塊3的頭部檢測(cè)字段與初始設(shè)置值不同,則可以斷定該“越界”現(xiàn)象至少是由于對(duì)內(nèi)存塊2或是內(nèi)存塊1的寫操作不當(dāng)而造成的,同理,通過(guò)依次對(duì)內(nèi)存塊2的尾部、頭部檢測(cè)字段,以及內(nèi)存塊1的尾部、頭部檢測(cè)字段進(jìn)行檢測(cè),從而進(jìn)一步檢測(cè)出該“越界”現(xiàn)象發(fā)生的緣由,從而可以有針對(duì)性地進(jìn)行維護(hù)操作。操作提示模塊用于根據(jù)第二內(nèi)存判斷模塊的判斷結(jié)果進(jìn)行相應(yīng)的提示。本發(fā)明檢測(cè)內(nèi)存訪問(wèn)越界的方法及裝置通過(guò)在申請(qǐng)分配內(nèi)存塊時(shí),自動(dòng)在分配的內(nèi)存塊的頭部及尾部添加設(shè)置初始默認(rèn)值的檢測(cè)字段,當(dāng)對(duì)內(nèi)存塊進(jìn)行相應(yīng)操作時(shí),調(diào)用檢測(cè)函數(shù)對(duì)分別對(duì)尾部和頭部檢測(cè)字段進(jìn)行檢測(cè),從而快速有效地檢測(cè)出內(nèi)存訪問(wèn)越界的現(xiàn)象,并進(jìn)一步檢測(cè)出造成內(nèi)存訪問(wèn)越界現(xiàn)象的原因,使得嵌入式系統(tǒng)中不恰當(dāng)?shù)膬?nèi)存越界操作能夠及時(shí)被發(fā)現(xiàn)和進(jìn)行針對(duì)性地維護(hù)操作,從而加強(qiáng)對(duì)系統(tǒng)內(nèi)存數(shù)據(jù)的保護(hù)強(qiáng)度, 提高嵌入式系統(tǒng)中有限內(nèi)存的使用效率。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種檢測(cè)內(nèi)存訪問(wèn)越界的方法,包括步驟a:申請(qǐng)內(nèi)存塊時(shí)在所申請(qǐng)內(nèi)存塊的尾部添加固定長(zhǎng)度的檢測(cè)字段;步驟b 進(jìn)行內(nèi)存塊操作時(shí),逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值是初始設(shè)置值,提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常;如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,執(zhí)行步驟C;步驟c 提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象。
2.根據(jù)權(quán)利要求1所述的檢測(cè)內(nèi)存訪問(wèn)越界的方法,其特征在于,在所述步驟a中,所述檢測(cè)字段的數(shù)值默認(rèn)設(shè)置為容易被檢測(cè)的數(shù)值。
3.根據(jù)權(quán)利要求1所述的檢測(cè)內(nèi)存訪問(wèn)越界的方法,其特征在于,所述步驟a還包括, 將所申請(qǐng)內(nèi)存塊的長(zhǎng)度分配為該內(nèi)存塊的初始申請(qǐng)長(zhǎng)度加上該內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段長(zhǎng)度。
4.根據(jù)權(quán)利要求1所述的檢測(cè)內(nèi)存訪問(wèn)越界的方法,其特征在于,所述步驟a還包括, 將分配好的內(nèi)存塊接入內(nèi)存鏈表中,并返回每個(gè)內(nèi)存塊對(duì)應(yīng)的初始地址。
5.根據(jù)權(quán)利要求1至4任一項(xiàng)所述的檢測(cè)內(nèi)存訪問(wèn)越界的方法,其特征在于,所述步驟 a還包括,在所申請(qǐng)內(nèi)存塊的頭部添加固定長(zhǎng)度的頭部檢測(cè)字段,并將該頭部檢測(cè)字段的數(shù)值默認(rèn)設(shè)置為容易被檢測(cè)的數(shù)值。
6.根據(jù)權(quán)利要求5所述的檢測(cè)內(nèi)存訪問(wèn)越界的方法,其特征在于,所述步驟a還包括, 將所申請(qǐng)內(nèi)存塊的長(zhǎng)度分配為該內(nèi)存塊的初始申請(qǐng)長(zhǎng)度加上該內(nèi)存塊對(duì)應(yīng)的頭部檢測(cè)字段長(zhǎng)度及尾部檢測(cè)字段長(zhǎng)度。
7.根據(jù)權(quán)利要求6所述的檢測(cè)內(nèi)存訪問(wèn)越界的方法,其特征在于,所述步驟c后還包括,逐一檢測(cè)每一個(gè)內(nèi)存塊的頭部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的頭部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果頭部檢測(cè)字段的數(shù)值不是初始設(shè)置值,提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作正常,并繼續(xù)判斷下一個(gè)內(nèi)存塊的頭部檢測(cè)字段;如果頭部檢測(cè)字段的數(shù)值是初始設(shè)置值,提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作不當(dāng)。
8.—種檢測(cè)內(nèi)存訪問(wèn)越界的裝置,包括內(nèi)存申請(qǐng)模塊和地址返回模塊,所述內(nèi)存申請(qǐng)模塊用于為需要使用的程序申請(qǐng)內(nèi)存塊,所述地址返回模塊用于將分配好的內(nèi)存塊接入內(nèi)存鏈表中,并返回每個(gè)內(nèi)存塊對(duì)應(yīng)的初始地址,其特征在于,還包括內(nèi)存設(shè)置模塊、第一內(nèi)存判斷模塊和狀態(tài)提示模塊,所述內(nèi)存設(shè)置模塊用于在所申請(qǐng)內(nèi)存塊的尾部添加固定長(zhǎng)度的檢測(cè)字段,所述第一內(nèi)存判斷模塊用于逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值為初始設(shè)置值,通過(guò)狀態(tài)提示模塊提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊內(nèi)存訪問(wèn)正常;如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,通過(guò)狀態(tài)提示模塊提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象;所述狀態(tài)提示模塊用于根據(jù)第一內(nèi)存判斷模塊的判斷結(jié)果進(jìn)行相應(yīng)的內(nèi)存狀態(tài)提示。
9.根據(jù)權(quán)利要求8所述的檢測(cè)內(nèi)存訪問(wèn)越界的裝置,其特征在于,還包括第二內(nèi)存判斷模塊和操作提示模塊,所述第二內(nèi)存判斷模塊用于逐一檢測(cè)每一個(gè)內(nèi)存塊的頭部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的頭部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果頭部檢測(cè)字段的數(shù)值不是初始設(shè)置值,通過(guò)操作提示模塊提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作正常;如果頭部檢測(cè)字段的數(shù)值是初始設(shè)置值,通過(guò)操作提示模塊提示該頭部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊寫操作不當(dāng);所述操作提示模塊用于根據(jù)第二內(nèi)存判斷模塊的判斷結(jié)果進(jìn)行相應(yīng)的提示。
10.根據(jù)權(quán)利要求8或9所述的檢測(cè)內(nèi)存訪問(wèn)越界的裝置,其特征在于,還包括內(nèi)存分配模塊,所述內(nèi)存分配模塊用于將所申請(qǐng)內(nèi)存塊的長(zhǎng)度分配為該內(nèi)存塊的初始申請(qǐng)長(zhǎng)度加上該內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段長(zhǎng)度或/和頭部檢測(cè)字段長(zhǎng)度。
全文摘要
本發(fā)明屬于嵌入式系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種檢測(cè)內(nèi)存訪問(wèn)越界的方法及裝置。本發(fā)明檢測(cè)內(nèi)存訪問(wèn)越界的方法,包括步驟a申請(qǐng)內(nèi)存塊時(shí)在所申請(qǐng)內(nèi)存塊的尾部添加固定長(zhǎng)度的檢測(cè)字段;步驟b進(jìn)行內(nèi)存塊操作時(shí),逐一檢測(cè)每一個(gè)內(nèi)存塊的尾部檢測(cè)字段,并判斷相應(yīng)內(nèi)存塊對(duì)應(yīng)的尾部檢測(cè)字段的數(shù)值是否為初始設(shè)置值,如果尾部檢測(cè)字段的數(shù)值不是初始設(shè)置值,執(zhí)行步驟c;步驟c提示該尾部檢測(cè)字段對(duì)應(yīng)的內(nèi)存塊存在內(nèi)存訪問(wèn)越界的現(xiàn)象。本發(fā)明檢測(cè)內(nèi)存訪問(wèn)越界的方法及裝置使得嵌入式系統(tǒng)中不恰當(dāng)?shù)膬?nèi)存越界操作能夠及時(shí)被發(fā)現(xiàn)和進(jìn)行針對(duì)性地維護(hù)操作,從而加強(qiáng)對(duì)系統(tǒng)內(nèi)存數(shù)據(jù)的保護(hù)強(qiáng)度,提高嵌入式系統(tǒng)中有限內(nèi)存的使用效率。
文檔編號(hào)G06F12/14GK102214147SQ20111017966
公開(kāi)日2011年10月12日 申請(qǐng)日期2011年6月29日 優(yōu)先權(quán)日2011年6月29日
發(fā)明者張?zhí)锊?申請(qǐng)人:深圳市五巨科技有限公司