国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      內存監(jiān)控方法和裝置的制作方法

      文檔序號:6618835閱讀:253來源:國知局
      專利名稱:內存監(jiān)控方法和裝置的制作方法
      技術領域
      本發(fā)明涉及電子設備技術領域,具體涉及內存監(jiān)控技術。
      背景技術
      在嵌入式實時系統(tǒng)中,由于存在內存訪問越界或寫已釋放內存等問題,因
      此,需要對內存進行監(jiān)控。目前的內存監(jiān)控方法主要有如下四種
      方法一、基于填充魔數(shù)字的內存監(jiān)控方法,即在需要監(jiān)控的內存中填充魔
      數(shù)字,通過在申請內存、釋放內存或定時檢查魔數(shù)字是否被改寫來判斷內存是
      否被非法改寫。該方法不能及時捕獲內存被非法改寫的現(xiàn)場信息。
      方法二、基于修改程序流程的內存監(jiān)控方法,即在程序流程中添加檢查代
      碼,從而在分配內存時能夠記錄該內存的大小,并在寫內存前進行4全查。
      由于方法二需要改寫程序流程,因此,會影響原程序流程的穩(wěn)定性,例如
      程序編譯時容易出現(xiàn)編譯問題等。而且,方法二還會導致大型工程性能降低、
      以及執(zhí)行文件龐大等問題。
      方法三、基于使用保護內存分隔不同內存區(qū)間的內存監(jiān)控方法,即在分配的不同內存塊之間設置內存保護頁,在內存越界寫到內存保護頁上時,觸發(fā)數(shù)據(jù)異常,從而監(jiān)控到內存越界寫操作。
      內存保護頁占用了內存,且內存保護頁的大小通常會比分配的內存塊大,因此,方法三降低了內存的可利用率。另外,方法三不能反映出越界寫操作的執(zhí)行主體,內存監(jiān)控粒度太粗。
      方法四、基于調試寄存器的內存監(jiān)控方法,即利用CPl^是供的調試寄存器對特定的內存進行監(jiān)控。由于大部分的CPU只支持對有限的內存地址進行監(jiān)
      5控,因此,不能滿足大塊內存監(jiān)控的需要。

      發(fā)明內容
      本發(fā)明實施方式的目的在于提供一種內存監(jiān)控方法和裝置,以實時監(jiān)測到 內存讀和寫數(shù)據(jù)越界的現(xiàn)場信息,從而實現(xiàn)對內存的實時監(jiān)控。
      本發(fā)明實施方式提供的內存監(jiān)控方法,包括 為需要監(jiān)控的內存設置內存管理單元訪問保護; 針對程序包對所述內存的申請和釋放操作,記錄內存分配信息; 在程序包執(zhí)行對所述內存的讀或寫數(shù)據(jù)操作時,基于所述內存管理單元訪 問保護而觸發(fā)異常處理操作;
      所述異常處理操作包括獲取所述讀或寫數(shù)據(jù)的目的地址,根據(jù)所述目的 地址和所述內存分配信息判斷所述讀或寫數(shù)據(jù)的內存訪問操作是否越界,如果 越界,則記錄所述內存訪問操作越界的現(xiàn)場信息,允許所述程序包繼續(xù)按照其 包含的程序編碼進行后續(xù)流程,如果沒有越界,則允許所述程序包繼續(xù)按照其 包含的程序編碼進行后續(xù)流程。
      本發(fā)明實施方式提供的內存監(jiān)控裝置,包括
      訪問保護設置模塊,用于為需要監(jiān)控的內存設置內存管理單元訪問保護; 內存分配和釋放監(jiān)控模塊,用于針對程序包對所述內存的申請和釋放操 作,記錄內存分配信息;
      異常中斷模塊,用于在所述程序包執(zhí)行對所述內存的讀或寫數(shù)據(jù)操作時, 基于所述內存管理單元訪問保護而被觸發(fā),執(zhí)行異常處理操作,所述異常處理 操作包括獲取所述讀或寫數(shù)據(jù)的目的地址,根據(jù)所述目的地址和所述內存分 配信息判斷所述讀或寫數(shù)據(jù)的內存訪問操作是否越界,如果越界,則記錄所述 內存訪問操作越界的現(xiàn)場信息,允許所述程序包繼續(xù)按照其包含的程序編碼進 行后續(xù)流程,如果沒有越界,則允許所述程序包繼續(xù)按照其包含的程序編碼進 行后續(xù)流程。通過上述技術方案的描述可知,通過利用內存管理單元訪問保護機制,并
      以實時監(jiān)測到內存讀和寫數(shù)據(jù)越界的現(xiàn)場信息,從而可以實現(xiàn)對內存的實時精確監(jiān)控,且被監(jiān)控的內存大小可以不受限制。


      圖l是本發(fā)明實施例一的內存監(jiān)控方法流程圖;圖2是本發(fā)明實施例二的內存監(jiān)控方法中記錄分配信息的流程圖;圖3是本發(fā)明實施例二的內存監(jiān)控方法中記錄內存訪問越界的現(xiàn)場信息的流程圖4是本發(fā)明實施例三的系統(tǒng)啟動過程中設置內存監(jiān)控的方法流程圖;圖5是本發(fā)明實施例四的內存監(jiān)控裝置示意圖。
      具體實施例方式
      本發(fā)明實施例 一提供一種內存監(jiān)控方法,該方法的流程如附圖1所示。
      圖l中,步驟IOO、確定需要監(jiān)控的內存,并為需要監(jiān)控的內存設置MMU(Memory Management Unit ,內存管J里單元)i方問j呆4戶。
      需要監(jiān)控的內存可以為網(wǎng)絡設備中的所有內存,也可以為網(wǎng)絡設備中的部分內存。需要監(jiān)控的內存可以根據(jù)實際需要來確定,例如,可以根據(jù)實際需要確定所有內存都需要進行監(jiān)控;再例如,根據(jù)實際需要確定一段地址范圍內的內存需要進行監(jiān)控。步驟100可以在操作系統(tǒng)的內存管理系統(tǒng)初始化之后執(zhí)行。
      需要說明的是,如果內存設置了MMU訪問保護,則對該內存的讀或寫操作都會觸發(fā)異常處理操作(也可稱為異常處理流程)。現(xiàn)有的異常處理流程為如果對設置有MMU訪問保護的內存的讀或寫數(shù)據(jù)操作超出了內存范圍,則停止程序的繼續(xù)執(zhí)行,輸出報警信息,并將任務桂起或重啟系統(tǒng)。在本實施例中,對設置了MMU訪問保護的內存進行讀或寫數(shù)據(jù)操作時觸發(fā)的異常處理流程與上述現(xiàn)有的異常處理流程不同,本實施例中觸發(fā)的異常處理流程所包括的才喿作 在下文中有詳細說明。
      步驟110、針對程序包對設置有MMU訪問保護的內存的申請和釋放操作記 錄內存分配信息。這里的程序包可以為函數(shù)等形式。
      本實施例可以采用插樁技術來實現(xiàn)針對程序包對設置有MMU訪問保護的 內存的申請和釋放操作記錄內存分配信息,即本實施例中的程序包為進行插 樁處理后的程序包。該插樁處理是針對程序包中申請和釋放內存操作進行的。 插樁處理后的程序包在執(zhí)行對設置有MMU訪問保護的內存進行申請和釋》文才乘 作時,會觸發(fā)記錄內存分配信息的操作。
      插樁處理方式有多種,本發(fā)明實施例可以采用現(xiàn)有的各種插樁處理方式, 本發(fā)明實施例不限制插樁處理的具體實現(xiàn)方式。
      一個具體的插樁處理方式為通過修改程序包中的程序編碼的方式對程序 包進行插樁處理,即在程序包中的申請和釋放指定內存對應的程序編碼處進行 插樁處理,如增加程序編碼等,以記錄對設置有MMU訪問保護的內存分配信 息。該具體的插樁處理方式需要》務改程序包中的程序編碼。另外,如果采用該 具體的插樁處理方式,則只要在程序包編譯運行前完成插樁處理即可。
      另一個具體的插樁處理方式為在程序包運行過程中,針對程序包中的申
      請和釋放指定內存操作進行插樁處理,以記錄對設置有MMU訪問保護的內存 分配信息。該具體的插樁處理方式不需要修改程序包中的程序編碼。
      步驟120 、在程序包執(zhí)行對設置有MMU訪問保護的內存的讀或寫數(shù)據(jù)操作 時,由于該內存設置了MMU訪問保護,因此,該讀或寫數(shù)據(jù)操作會觸發(fā)異常 處理操作,到步驟130。
      步驟130、執(zhí)行異常處理操作。
      本步驟中執(zhí)行的異常處理操作包括獲取上述對內存的讀或寫數(shù)據(jù)的目的 地址,然后,將該目的地址與上述記錄的內存分配信息進行比較,如果根據(jù)比較結果確定該目的地址不屬于內存分配信息中記錄的內存地址范圍,則確定該目的地址越界(即讀或寫數(shù)據(jù)操作的內存訪問操作越界),記錄該讀或寫數(shù)據(jù)的內存訪問操作越界的現(xiàn)場信息;如果根據(jù)比較結果確定該目的地址屬于內存分配信息中記錄的內存地址范圍,則確定該讀或寫凄丈據(jù)才喿作的內存訪問l喿作沒
      有越界,不需要記錄該讀或寫數(shù)據(jù)的內存訪問"t喿作越界的現(xiàn)場信息;而且,無論判斷結果是否為越界,都允許該程序包繼續(xù)按照其包含的程序編碼進行后續(xù)流程運行。也就是說,異常處理操作在最后會返回程序包,使程序包繼續(xù)進行后續(xù)流程,即本實施例中觸發(fā)的異常處理操作不會影響程序包的正常運行。
      本實施例的異常處理操作中的 一個確定內存訪問操作越界的具體例子為如果讀或寫數(shù)據(jù)的目的地址不在內存分配信息中任一已分配內存的地址范圍之內,則確定該讀或寫數(shù)據(jù)的內存訪問操作越界。
      上述讀或寫數(shù)據(jù)的目的地址如果是起始地址,則在越界判斷過程中還需要考慮讀或寫數(shù)據(jù)的長度;如果上述讀或寫數(shù)據(jù)的目的地址是一個地址范圍,則在越界判斷過程中可以不考慮讀或寫數(shù)據(jù)的長度。
      由上述描述可知,本實施例修改了MMU訪問保護觸發(fā)的現(xiàn)有的異常處理流程,通過觸發(fā)修改后的異常處理流程,不但不會影響程序包的正常執(zhí)行,而且,還可以及時記錄程序包中讀或寫數(shù)據(jù)的內存訪問操作越界的現(xiàn)場信息。
      上述記錄的現(xiàn)場信息包括調用棧信息、內存狀態(tài)、寄存器值和內存分配狀況中的任意一個或多個,而且也可以根據(jù)需要包括其他信息。
      上述記錄的現(xiàn)場信息可以用于多種應用, 一個具體的應用的例子為輸出告警信息,以便于根據(jù)告警信息進行內存管理。這里的告警信息如觸發(fā)告警燈亮的觸發(fā)信號;再如,向顯示屏幕或打印機等輸出現(xiàn)場信息。本發(fā)明實施例不
      限制現(xiàn)場信息包括的具體內容、現(xiàn)場信息的具體應用方式、以及輸出告警信息的具體實現(xiàn)方式。
      上迷實施例一需要說明的是針對某些程序包(如操作系統(tǒng)的內存管理操作的程序包)而言,如果這部分程序包對上述設置有MMU保護的內存的讀或 寫數(shù)據(jù)操作不需要進行上述是否越界保護等處理,則這部分程序包可以稱為不
      需要進行內存監(jiān)控的程序包,相反地,對上述設置有MMU保護的內存的讀或
      寫數(shù)據(jù)操作需要進行上述是否越界保護等處理的程序包可以稱為需要進行內 存監(jiān)控的程序包。針對不需要進行內存監(jiān)控的程序包,本實施例可以不進行異 常處理操作的觸發(fā),也可以觸發(fā)上述異常處理操作,但是,在異常處理操作中 不進行獲取目的地址和判斷的操作,而是直接允許這部分程序包繼續(xù)按照其包 含的程序編碼進行后續(xù)流程。
      不進行異常處理操作的觸發(fā)的一個具體的例子為在不需要進行內存監(jiān)控 的程序包對設置有MMU訪問保護的內存進行讀或寫數(shù)據(jù)操作時,控制MMU 訪問保護處于關閉狀態(tài),否則,控制MMU訪問保護處于打開狀態(tài)。本發(fā)明實 施例可以使設置有MMU訪問保護的整個內存的MMU訪問保護均處于關閉狀 態(tài),也可以使不需要進行內存監(jiān)控的程序包的讀或寫凄t據(jù)操作涉及到的內存的 MMU訪問4呆護處于關閉狀態(tài)。
      如果不進行異常處理操作的觸發(fā),則可以采用插樁的方式來實現(xiàn),即針對 不需要進行內存監(jiān)控的程序包進行插樁處理,該插樁處理是針對程序包執(zhí)行 對設置有MMU訪問保護的內存的讀或寫數(shù)據(jù)操作時,使MMU訪問保護處于 關閉狀態(tài),否則,使MMU訪問保護處于打開狀態(tài)而進行的。插樁處理后的程 序包能夠實現(xiàn)在對設置有MMU訪問保護的內存進行讀或寫數(shù)據(jù)操作時,使 MMU訪問保護處于關閉狀態(tài),否則使MMU訪問保護處于打開狀態(tài)。這里的 插樁的實現(xiàn)方式仍然有兩種,即通過修改程序編碼的方式實現(xiàn)插樁和在程序包 運行過程中實現(xiàn)插樁,具體的實現(xiàn)方式不再詳細說明。
      如果存在不需要進行內存監(jiān)控的程序包和需要進行內存監(jiān)控的程序包,這 兩種程序包都需要觸發(fā)異常處理操作,且需要在異常處理操作中對這兩種程序 包進行區(qū)別對待,則需要對這兩部分程序包進行區(qū)分, 一個區(qū)分的具體例子為
      10對不需要進行內存監(jiān)控的程序包進行標記,對需要進行內存監(jiān)控的程序包不進
      行標記;另一個區(qū)分的具體例子為對需要進行內存監(jiān)控的程序包進行標記,對不需要進行內存監(jiān)控的程序包不進行標記。從而在異常處理操作流程中,可以先根據(jù)標記判斷程序包是需要進行內存監(jiān)控的程序包,還是不需要進行內存監(jiān)控的程序包,然后,再進行后續(xù)處理。
      在內存監(jiān)控結束等情況下,可以去除內存的MMU訪問保護、以及針對程序包的插樁(運行過程中實現(xiàn)插樁處理)等。去除MMU訪問保護以及去除插樁的 一個具體實現(xiàn)方式為重新啟動電子設備的操作系統(tǒng)。
      從上述實施例一的描述可知,通過對指定內存i殳置MMU訪問保護,并》務改MMU訪問保護觸發(fā)的現(xiàn)有異常處理操作,能夠在不需要針對程序包中讀和寫操作的程序代碼進行修改、且不影響程序包正常處理流程的情況下,及時監(jiān)控到對指定內存的讀或寫數(shù)據(jù)操作越界的現(xiàn)場信息。通過對程序包中申請和釋放指定內存的操作進行插樁處理,能夠方便及時的記錄指定內存的分配信息。在通常情況下,相對于程序包中讀和寫數(shù)據(jù)操作來說,程序包中申請和釋放指定內存的操作是非常少量的,因此,即便是采用修改程序包中程序編碼的插樁處理方式,對程序包的程序編碼的修改量也是非常少,從而在一定程度上避免了程序編譯時容易出現(xiàn)編譯問題、導致大型工程性能降低、以及執(zhí)行文件龐大等問題。另外,如果采用在對程序包編譯過程中進行插樁處理方式,則能夠完全避免對程序包的程序編碼進行修改的現(xiàn)象。通過對讀或寫數(shù)據(jù)操作的目的地址與內存分配信息進行對比,即便是目的地址中有l(wèi)個字節(jié)不在內存分配信息所示的內存塊的地址范圍內,也能夠精確的捕獲到內存訪問操作的越界行為。由于MMU訪問保護可以涉及到所有的內存,因此,本實施例一的內存監(jiān)控可以不受內存大小的限制。
      本發(fā)明實施例二提供一種內存監(jiān)控方法,該內存監(jiān)控方法包括兩部分內容, 一部分為記錄內存分配信息流程,具體如附圖2所示;另一部分為記錄內存訪問越界的現(xiàn)場信息流程,具體如附圖3所示。
      圖2中,步驟200、對需要監(jiān)控的內存設置MMU訪問保護,程序包如函數(shù) 申請或釋放設置有MMU訪問保護的內存。
      步驟210、根據(jù)上述申請或釋放內存的情況記錄內存分配信息,該分配信 息可以存儲在內存分配表中。
      如果上述步驟200和步驟210在網(wǎng)絡設備系統(tǒng)初始化時即開始執(zhí)行,則可以 確保程序包中所有針對設置有MMU訪問保護的內存的申請和釋放情況都會記 錄到內存分配表中。
      步驟220、程序包如函lt繼續(xù)正常運行,即程序繼續(xù)正常運行。
      圖3中、步驟300、程序包如函數(shù)執(zhí)行讀數(shù)據(jù)操作或寫數(shù)據(jù)操作,該讀數(shù)據(jù) 或寫數(shù)據(jù)操作涉及到設置有MMU訪問保護的內存,即程序包對設置有MMU訪 問保護的內存進行讀數(shù)據(jù)操作或寫數(shù)據(jù)操作。
      步驟310、該讀數(shù)據(jù)操作或寫數(shù)據(jù)操作觸發(fā)數(shù)據(jù)異常處理流程,到步驟320。
      步驟320、利用該讀數(shù)據(jù)操作或寫數(shù)據(jù)操作的目的地址查詢內存分配表, 并輸出查詢結果,該查詢結果可以為目的地址不屬于內存分配表中任一已分 配內存的地址范圍,該查詢結果也可以為目的地址屬于內存分配表中某一已 分配內存的地址范圍。需要說明的是,上述目的地址屬于內存分配表中某一已 分配內存的地址范圍是指本次讀或寫數(shù)據(jù)所對應的地址范圍全部屬于內存分 配表中某一已分配內存的地址范圍。
      步驟330、根據(jù)查詢結杲判斷該讀數(shù)據(jù)操作或寫數(shù)據(jù)操作是否合法,即根 據(jù)查詢結果判斷該讀數(shù)據(jù)操作或寫數(shù)據(jù)操作是否為內存訪問越界的操作;如果 查詢結果為目的地址屬于內存分配表中某一已分配內存的地址范圍,則確定出 該讀數(shù)據(jù)或寫數(shù)據(jù)操作是合法的,不是內存訪問越界操作,到步驟350;如果 查詢結果為目的地址不屬于內存分配表中任一已分配內存的地址范圍,則確定 出該讀數(shù)據(jù)或寫數(shù)據(jù)操作是非法的,是內存訪問越界操作,到步驟340。步驟340、記錄本次內存訪問越界的現(xiàn)場信息,并上報錯誤信息,到步驟350。上述上報錯誤信息如觸發(fā)預定指示燈亮,再如向屏幕或打印機等輸出本次記錄的現(xiàn)場信息。這里記錄集輸出的現(xiàn)場信息可以為調用棧信息、內存狀態(tài)信息、寄存器值和內存分配狀況中的一種或多種,當然,該現(xiàn)場信息也可以為其他內容的信息。
      步驟350、程序包如函數(shù)繼續(xù)進行后續(xù)的操作,即程序繼續(xù)正常運行。本發(fā)明實施例三提供一種操作系統(tǒng)啟動過程中設置內存監(jiān)控的方法,該方
      法的流程如附圖4所示。實施例三是以應用在某電子設備中為例進行說明的,
      這里的電子設備如計算機等。
      圖4中,步驟400、操:作系統(tǒng)啟動流程開始。
      步驟410、在電子設備操作系統(tǒng)的內存管理系統(tǒng)初始化之后,判斷是否需要對內存進行監(jiān)控,如果需要對內存進行監(jiān)控,則到步驟420,否則到步驟470。
      步驟420、為內存監(jiān)控過程分配必要的內存。如果由內存監(jiān)控工具來實現(xiàn)內存監(jiān)控,則調用內存監(jiān)控工具,內存監(jiān)控工具啟動,為內存監(jiān)控工具分配必要的內存。
      步驟430、內存監(jiān)控工具對內存分配表進行初始化(如創(chuàng)建內存分配表或清空內存分配表等),為需要進行申請和釋放內存的函數(shù)進行插樁處理(該插樁處理也可以稱為為函數(shù)加鉤子),該插樁處理是在函數(shù)運行過程中進行的插樁處理。該插樁處理的目的包括在該函數(shù)申請內存時,能夠向內存分配表中添加申請內存的描述信息;在該函數(shù)釋放內存時,能夠從內存分配表中刪除該釋放的內存對應的描述信息。需要特別說明的是,如果采用修改程序編碼的插樁方式,則步驟430可以省略,即從步驟420直接到步驟440。
      步驟440、內存監(jiān)控工具修改數(shù)據(jù)異常處理流程。修改后的異常處理流程如上述實施例中的描述,在此不再重復說明。需要說明的是,上述步驟440描述的是對現(xiàn)有的數(shù)據(jù)異常處理流程進行修改,該步驟也可以變更為不對現(xiàn)有的數(shù)據(jù)異常處理流程進行修改,而是修改函數(shù)對內存進行讀或寫數(shù)據(jù)操作的觸 發(fā)連接,使函數(shù)對內存進行讀或寫數(shù)據(jù)時不再觸發(fā)原有的數(shù)據(jù)異常處理流程, 而是觸發(fā)本發(fā)明實施例中的異常處理流程。
      步驟450、對需要監(jiān)控的內存設置MMU訪問保護。需要監(jiān)控的內存通常屬 于電子設備操作系統(tǒng)的可分配內存區(qū)。
      步驟460、對某些函數(shù)進行特殊標識置位操作,如將某些函數(shù)的特殊標識 置為l。這些特殊標識的作用在于表示可以不對函凝:針對設置有MMU訪問^f呆 護的內存的讀數(shù)據(jù)或寫數(shù)據(jù)操作進行內存訪問操作越界監(jiān)控。需要特別說明的 是,如果采用修改程序編碼的插樁方式,則步驟460可以省略,即從步驟450直 接到步驟470。
      對函數(shù)進行特殊標識置位操作如在函數(shù)的入口處將特殊標識設置為1,在 函數(shù)的出口處將特殊標識清O。
      上述的某些函數(shù)如操作系統(tǒng)的各種維護可分配內存區(qū)的函數(shù)。維護可分配 內存區(qū)的函數(shù)如修改內存引用計數(shù)函數(shù)、以及其他內存檢查工具的函數(shù)等。
      步驟470、繼續(xù)進行操作系統(tǒng)啟動的后續(xù)操作,恢復操作系統(tǒng)的正常運行。
      步驟480、本次操:作系統(tǒng)啟動流程結束。
      實施例四提供一種內存監(jiān)控裝置,該裝置可以稱為內存監(jiān)控工具。內存監(jiān) 控裝置的結構如附圖5所示。
      圖5中的內存監(jiān)控裝置包括訪問保護設置模塊500、內存分配和釋放監(jiān)控 模塊510和異常中斷模塊520。可選的,該內存監(jiān)控裝置還可以包括插樁模塊 530、訪問保護控制模塊540、標記模塊550和告警模塊560。
      訪問保護設置模塊500,用于為需要監(jiān)控的內存設置內存管理單元訪問保 護。需要監(jiān)控的內存可以為網(wǎng)絡設備中的所有內存,也可以為網(wǎng)絡設備中的部 分內存。需要監(jiān)控的內存可以根據(jù)實際需要來確定,例如,可以根據(jù)實際需要 確定所有內存都需要進行監(jiān)控;再例如,根據(jù)實際需要確定一段地址范圍內的內存需要進行監(jiān)控。訪問保護設置模塊500可以在操作系統(tǒng)的內存管理系統(tǒng)初始化之后執(zhí)行MMU訪問保護的設置操作。
      內存分配和釋放監(jiān)控模塊510,用于針對程序包對設置有MMU訪問保護的內存的申請和釋放操作記錄內存分配信息。由于這里的程序包進行了針對申請和釋放內存的插樁處理,因此,程序包在運行過程中內存分配和釋放監(jiān)控模塊510會記錄內存分配信息。
      異常中斷模塊520,用于在被觸發(fā)后執(zhí)行異常處理操作。異常中斷模塊520是在進行了插樁處理的程序包執(zhí)行對設置有MMU訪問保護的內存的讀或寫數(shù)據(jù)操作時,基于MMU訪問保護而被觸發(fā)的。
      異常中斷模塊520執(zhí)行的異常處理操作包括獲取上述對內存的讀或寫數(shù)據(jù)的目的地址,然后,將該目的地址與上述記錄的內存分配信息進行比較,如果根據(jù)比較結果確定該目的地址不屬于內存分配信息中記錄的內存地址范圍,則確定該目的地址越界(即讀或寫數(shù)據(jù)操作的內存訪問操作越界),記錄該讀或寫數(shù)據(jù)的內存訪問操作越界的現(xiàn)場信息;如果根據(jù)比較結果確定該目的地址屬于內存分配信息中記錄的內存地址范圍,則確定該讀或寫數(shù)據(jù)操作的內存訪問操作沒有越界,不需要記錄該讀或寫數(shù)據(jù)的內存訪問操作越界的現(xiàn)場信息;而且,無論判斷結果是否為越界,異常中斷模塊520都允許該程序包繼續(xù)按照其包含的程序編碼進行后續(xù)流程運行。也就是說,本實施例中的異常中斷模塊520執(zhí)行的操作不會影響程序包的正常運行。
      上述讀或寫數(shù)據(jù)的目的地址如果是起始地址,則異常中斷才莫塊520在越界判斷過程中還需要考慮讀或寫數(shù)據(jù)的長度;如果上述讀或寫數(shù)據(jù)的目的地址是一個地址范圍,則異常中斷^t塊520在越界判斷過程中可以不考慮讀或寫數(shù)據(jù)的長度。
      異常中斷模塊520記錄的現(xiàn)場信息包括調用棧信息、內存狀態(tài)、寄存器值和內存分配狀況中的任意一個或多個,而且也可以根據(jù)需要包括其他信息。如果程序包對設置有MMU訪問保護的內存的申請和釋放操作觸發(fā)記錄內 存分配信息操作由程序包運行時進行插樁的方式來實現(xiàn),則內存監(jiān)控裝置還需
      要包括插樁模塊530。
      插樁模塊530,用于在程序包運行過程中,針對程序包中的申請和釋放指 定內存進行插樁,以實現(xiàn)對設置有MMU訪問保護的內存分配信息進行記錄。 插樁模塊530不需要對程序包中的程序編碼進行修改。
      如果僅需要對部分程序包的讀數(shù)據(jù)或寫數(shù)據(jù)操作進行內存越界監(jiān)控,則內 存監(jiān)控裝置可以包括訪問保護控制模塊540和訪問保護控制模塊550。當內存 監(jiān)控裝置包括訪問保護控制模塊540和訪問保護控制模塊550時,是通過是否 進行異常處理操作的觸發(fā)來實現(xiàn)是否進行內存越界監(jiān)控的。
      訪問保護控制模塊540,用于在不需要觸發(fā)異常處理操作的程序包執(zhí)行對 內存的讀或寫數(shù)據(jù)操作時,控制MMU訪問保護處于關閉狀態(tài),否則,控制 MMU訪問<呆護處于打開狀態(tài)。
      訪問保護控制才莫塊540可以采用插樁的方式來實現(xiàn)上述MMU訪問〗呆護的 關閉和打開狀態(tài)控制。即訪問保護控制模塊540對設置有MMU訪問保護的內 存進行讀或寫數(shù)據(jù)操作不需要觸發(fā)異常處理操作的程序包進行插樁處理,該插 樁處理是針對程序包執(zhí)行對設置有MMU訪問保護的內存的讀或寫數(shù)據(jù)操作 時,1"吏MMU訪問保護處于關閉狀態(tài),否則,Y吏MMU訪問保護處于打開狀態(tài) 而進行的。
      插樁處理后的程序包能夠實現(xiàn)在對i殳置有MMU訪問保護的內存進行讀 或寫數(shù)據(jù)操作時,使MMU訪問保護處于關閉狀態(tài),否則使MMU訪問保護處 于打開狀態(tài)。
      在僅需要對部分程序包的讀數(shù)據(jù)或寫數(shù)據(jù)操作進行內存越界監(jiān)控的情況 下,內存監(jiān)控裝置也可以不包括訪問保護控制模塊540,而是包括標記模塊550, 此時,異常中斷模塊520包括判斷子模塊和異常中斷子模塊。標記模塊550,用于對設置有MMU訪問保護的內存進行讀或寫數(shù)據(jù)操作不需要判斷是否越界的程序包進行標記,如在程序包的入口處進行標記。不需要判斷是否越界的程序包如操作系統(tǒng)的內存管理操作的程序包等。標記模塊550還可以在程序包的出口處清除該標記,如將該標記清0 。
      設置標記可以通過插樁處理來實現(xiàn)。當本實施例中的訪問保護控制才莫塊540和標記才莫塊550都采用插樁處理方式時,訪問保護控制才莫塊540和插才莊才莫塊530 —起、或者標記才莫塊550和插樁才莫塊530 —起可以稱為插樁單元。
      判斷子模塊,用于判斷對設置有MMU訪問保護的內存進行讀或寫數(shù)據(jù)操作的程序包是否有標記模塊550設置的標記。
      異常中斷子模塊,用于在判斷子模塊的判斷結果為設置有標記時,直接允許該程序包繼續(xù)按照其包含的程序編碼進行后續(xù)流程,在判斷子模塊的判斷結果為沒有設置標記時,獲取讀或寫數(shù)據(jù)的目的地址,才艮據(jù)該目的地址和內存分配信息判斷該讀或寫數(shù)據(jù)的內存訪問操作是否越界,如果越界,則記錄該內存訪問操作越界的現(xiàn)場信息,允許該程序包繼續(xù)按照其包含的程序編碼進行后續(xù)流程,如果沒有越界,則直接允許該程序包繼續(xù)按照其包含的程序編碼進行后續(xù)流程。
      也就是說,針對設置有標記的程序包,如果該程序包觸發(fā)了異常處理操作,則異常中斷子模塊在異常處理操作中不對該程序包進行獲取目的地址和判斷是否越界的操作,而是直接允許該程序包繼續(xù)按照其包含的程序編碼進行后續(xù)流程,退出異常處理操作流程。
      告警模塊560,用于根據(jù)異常中斷模塊520記錄的現(xiàn)場信息輸出告警信息。例如,告警模塊560觸發(fā)告警燈亮;再如,告警才莫塊560向顯示屏幕或打印機等輸出現(xiàn)場信息。
      從上述實施例四的描述可知,通過訪問保護設置模塊500對指定內存設置MMU訪問保護,且異常中斷模塊520采用修改后的異常處理操作,能夠在不需
      17要針對程序包中讀和寫操作的程序代碼進行修改、且不影響程序包正常處理流程的情況下,及時監(jiān)控到對指定內存的讀或寫數(shù)據(jù)操作越界的現(xiàn)場信息。通過
      插樁模塊530對程序包中申請和釋放指定內存的操作進行插樁處理,使內存分配和釋放監(jiān)控模塊510能夠方便及時的記錄指定內存的分配信息。在通常情況下,相對于程序包中讀和寫數(shù)據(jù)操作來說,程序包中申請和釋放指定內存的操作是非常少量的,因此,即便是采用修改程序包中程序編碼的插樁處理方式,對程序包的程序編碼的修改量也是非常少,從而在一定程度上避免了程序編譯時容易出現(xiàn)編譯問題、導致大型工程性能降低、以及執(zhí)行文件龐大等問題。另外,如果采用在對程序包編譯過程中進行插樁處理方式,則能夠完全避免對程序包的程序編碼進行修改的現(xiàn)象。異常中斷模塊520通過對讀或寫數(shù)據(jù)操作的目的地址與內存分配信息進行對比,即便是目的地址中有l(wèi)個字節(jié)不在內存分配信息所示的內存塊的地址范圍內,異常中斷模塊520也能夠精確的捕獲到內存訪問操作的越界行為。由于MMU訪問保護可以涉及到所有的內存,因此,本實施例四的內存監(jiān)控裝置可以監(jiān)控的內存大小可以不受限制。
      通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到本發(fā)明可借助軟件加必需的石更件平臺的方式來實現(xiàn),當然也可以全部通過石更件來實施,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術方案對背景技術做出貢獻的全部或者部分可以以軟件產品的形式體現(xiàn)出來,該計算機軟件產品可以存儲在存儲介質中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。
      雖然通過實施例描繪了本發(fā)明,本領域普通技術人員知道,本發(fā)明有許多變形和變化而不脫離本發(fā)明的精神,本發(fā)明的申請文件的權利要求包括這些變形和變化。
      權利要求
      1、一種內存監(jiān)控方法,其特征在于,包括為需要監(jiān)控的內存設置內存管理單元訪問保護;針對程序包對所述內存的申請和釋放操作,記錄內存分配信息;在程序包執(zhí)行對所述內存的讀或寫數(shù)據(jù)操作時,基于所述內存管理單元訪問保護而觸發(fā)異常處理操作;所述異常處理操作包括獲取所述讀或寫數(shù)據(jù)的目的地址,根據(jù)所述目的地址和所述內存分配信息判斷所述讀或寫數(shù)據(jù)的內存訪問操作是否越界,如果越界,則記錄所述內存訪問操作越界的現(xiàn)場信息,允許所述程序包繼續(xù)按照其包含的程序編碼進行后續(xù)流程,如果沒有越界,則允許所述程序包繼續(xù)按照其包含的程序編碼進行后續(xù)流程。
      2、 如權利要求1所述的方法,其特征在于,所述程序包為針對內存申請 和釋放操作記錄內存分配信息進行插樁處理的程序包。
      3、 如權利要求1所述的方法,其特征在于,所述越界的現(xiàn)場信息包括 調用棧信息、內存狀態(tài)、寄存器值和內存分配狀況中的任意一個或多個。
      4、 如權利要求1或2或3所述的方法,其特征在于,所述方法還包括 在不需要觸發(fā)所述異常處理操作的程序包執(zhí)行對所述內存的讀或寫數(shù)據(jù)才乘作時,控制所述內存管理單元訪問保護處于關閉狀態(tài),否則,控制所述內存 管理單元訪問保護處于打開狀態(tài)。
      5、 如權利要求1或2或3所述的方法,其特征在于,所述方法還包括 對所述內存進行讀或寫數(shù)據(jù)操作不需要判斷是否越界的程序包進行標記; 且所述異常處理操作還包括針對有所述標記的程序包,不進行所述獲取目的地址和所述是否越界的判 斷,直接允許所述程序包繼續(xù)按照其包含的程序編碼進行后續(xù)流程。
      6、 如權利要求5所述的方法,其特征在于,所述進行標記的程序包包括操作系統(tǒng)的內存管理操作的程序包。
      7、 一種內存監(jiān)控裝置,其特征在于,包括訪問保護設置模塊,用于為需要監(jiān)控的內存設置內存管理單元訪問保護; 內存分配和釋放監(jiān)控模塊,用于針對程序包對所述內存的申請和釋放操 作,記錄內存分配信息;異常中斷模塊,用于在所述程序包執(zhí)行對所述內存的讀或寫數(shù)據(jù)操作時, 基于所述內存管理單元訪問保護而被觸發(fā),執(zhí)行異常處理才喿作,所述異常處理 操作包括獲取所述讀或寫數(shù)據(jù)的目的地址,根據(jù)所述目的地址和所述內存分 配信息判斷所述讀或寫數(shù)據(jù)的內存訪問操作是否越界,如果越界,則記錄所述 內存訪問操作越界的現(xiàn)場信息,允許所述程序包繼續(xù)按照其包含的程序編碼進 行后續(xù)流程,如果沒有越界,則允許所述程序包繼續(xù)按照其包含的程序編碼進 行后續(xù)流程。
      8、 如權利要求7所述的裝置,其特征在于,所述裝置還包括 插樁模塊,用于在所述程序包運行過程中,針對程序包中的申請和釋放指定內存進行插樁。
      9、 如權利要求7所述的裝置,其特征在于,所述裝置還包括 訪問保護控制模塊,用于在不需要觸發(fā)所述異常處理操作的程序包執(zhí)行對所述內存的讀或寫數(shù)據(jù)操作時,控制所述內存管理單元訪問保護處于關閉狀 態(tài),否則,控制所述內存管理單元訪問保護處于打開狀態(tài)。
      10、 如權利要求7所述的裝置,其特征在于,所述裝置還包括 標記模塊,用于對所述內存進行讀或寫數(shù)據(jù)操作不需要判斷是否越界的程序包進4亍標記;且所述異常中斷模塊包括判斷子模塊,用于判斷對所述內存進行讀或寫數(shù)據(jù)操作的程序包是否有所述標記;異常中斷子模塊,用于在所述判斷子模塊的判斷結果為有所述標記時,直塊的判斷結果為沒有所述標記時,獲取所述讀或寫數(shù)據(jù)的目的地址,根據(jù)所述 目的地址和所述內存分配信息判斷所述讀或寫數(shù)據(jù)的內存訪問操作是否越界, 如果越界,則記錄所述內存訪問操作越界的現(xiàn)場信息,允許所述程序包繼續(xù)按 照其包含的程序編碼進行后續(xù)流程,如果沒有越界,則允許所述程序包繼續(xù)按 照其包含的程序編碼進^f于后續(xù)流程。
      11、如權利要求7至10中任一權利要求所述的裝置,其特征在于,所述裝 置還包括告警模塊,用于根據(jù)所述異常中斷模塊記錄的現(xiàn)場信息輸出告警信息。
      全文摘要
      本發(fā)明實施例公開了一種內存監(jiān)控方法和裝置。其中的內存監(jiān)控方法包括為需要監(jiān)控的內存設置內存管理單元訪問保護,針對程序包對所述內存的申請和釋放操作記錄內存分配信息,在程序包執(zhí)行對所述內存的讀或寫數(shù)據(jù)操作時,基于內存管理單元訪問保護而觸發(fā)異常處理操作獲取讀或寫數(shù)據(jù)的目的地址,根據(jù)目的地址和內存分配信息判斷讀或寫數(shù)據(jù)的內存訪問操作是否越界,如果越界,記錄內存訪問操作越界的現(xiàn)場信息,允許程序包繼續(xù)按照包含的程序編碼進行后續(xù)流程,如果沒有越界,允許程序包繼續(xù)按照包含的程序編碼進行后續(xù)流程。上述技術方案能夠實時監(jiān)測到內存讀和寫數(shù)據(jù)越界的現(xiàn)場信息,實現(xiàn)了對內存的實時監(jiān)控,且被監(jiān)控的存儲區(qū)域的大小不受限制。
      文檔編號G06F11/30GK101561775SQ200910084008
      公開日2009年10月21日 申請日期2009年5月12日 優(yōu)先權日2009年5月12日
      發(fā)明者葉凌群, 赫 蘇 申請人:華為技術有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1