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

一種在Windows系統(tǒng)的內(nèi)存中搜索指定數(shù)據(jù)的方法及系統(tǒng)與流程

文檔序號:12363561閱讀:967來源:國知局

本發(fā)明涉及Windows系統(tǒng)中的數(shù)據(jù)搜索領(lǐng)域,具體涉及一種在Windows系統(tǒng)的內(nèi)存中搜索指定數(shù)據(jù)的方法及系統(tǒng)。



背景技術(shù):

在Windows系統(tǒng)的程序開發(fā)和使用過程中,需要在內(nèi)存中搜索指定數(shù)據(jù),例如需要知道某段代碼(代碼也是數(shù)據(jù))被加載到了內(nèi)存中的什么地址,或者是殺毒引擎需要對進(jìn)程的內(nèi)存去搜索指定數(shù)據(jù)特征,或者是需要修改第三方程序的某個數(shù)值等。

目前,現(xiàn)有的在內(nèi)存中搜索指定數(shù)據(jù)的方法一般為:人工在指定的內(nèi)存區(qū)域中,通過人眼觀看的方式搜索是否存在與搜索數(shù)據(jù)相同的指定數(shù)據(jù)。但是,通過人眼搜索的方式得出的數(shù)據(jù),可能與指定數(shù)據(jù)存在誤差,搜索精度較低,而且當(dāng)內(nèi)存區(qū)域(即搜索區(qū)域)中的數(shù)據(jù)量較大時,人眼搜索指定數(shù)據(jù)的耗時較長,工作效率較低。



技術(shù)實現(xiàn)要素:

針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明解決的技術(shù)問題為:自動在每個內(nèi)存塊中搜索指定數(shù)據(jù),本發(fā)明搜索指定數(shù)據(jù)的耗時較少,工作效率和搜索精度均較高,非常實用。

為達(dá)到以上目的,本發(fā)明提供的在Windows系統(tǒng)的內(nèi)存中搜索指定數(shù)據(jù)的方法,包括以下步驟:

步驟A、根據(jù)需要搜索的內(nèi)存塊的起始地址、以及使用當(dāng)前內(nèi)存塊的進(jìn)程,獲取當(dāng)前內(nèi)存塊的狀態(tài)屬性和保護(hù)屬性,轉(zhuǎn)到步驟B;

步驟B、判斷當(dāng)前內(nèi)存塊的狀態(tài)屬性和保護(hù)屬性是否均不為過濾屬性,若是,轉(zhuǎn)到步驟C;否則確定當(dāng)前內(nèi)存塊沒有與搜索數(shù)據(jù)相同的指定數(shù)據(jù);

步驟C、判斷當(dāng)前內(nèi)存塊中是否存在數(shù)據(jù)內(nèi)容和數(shù)據(jù)長度,均與搜索數(shù)據(jù)相同的指定數(shù)據(jù),若是,記錄所有指定數(shù)據(jù)的內(nèi)存地址,否則確定當(dāng)前內(nèi)存塊沒有與搜索數(shù)據(jù)相同的指定數(shù)據(jù)。

本發(fā)明實施例提供的實現(xiàn)上述方法的在Windows系統(tǒng)的內(nèi)存中搜索指定數(shù)據(jù)的系統(tǒng),包括內(nèi)存塊屬性獲取模塊、過濾屬性判斷模塊和內(nèi)存塊搜索模塊;

內(nèi)存塊屬性獲取模塊用于:收到內(nèi)存塊屬性獲取信號后,根據(jù)需要搜索的內(nèi)存塊的起始地址、以及使用內(nèi)存塊的進(jìn)程,獲取內(nèi)存塊的狀態(tài)屬性和保護(hù)屬性,向過濾屬性判斷模塊發(fā)送過濾屬性判斷信號;

過濾屬性判斷模塊用于:收到過濾屬性判斷信號后,判斷內(nèi)存塊的狀態(tài)屬性和保護(hù)屬性是否均不為過濾屬性,若是,向內(nèi)存塊搜索模塊發(fā)送內(nèi)存塊搜索信號;否則確定內(nèi)存塊沒有與搜索數(shù)據(jù)相同的指定數(shù)據(jù);

內(nèi)存塊搜索模塊用于:收到內(nèi)存塊搜索信號后,判斷內(nèi)存塊中是否存在數(shù)據(jù)內(nèi)容和數(shù)據(jù)長度,均與搜索數(shù)據(jù)相同的指定數(shù)據(jù),若是,記錄所有指定數(shù)據(jù)的內(nèi)存地址,否則確定內(nèi)存塊沒有與搜索數(shù)據(jù)相同的指定數(shù)據(jù)。

與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于:

(1)本發(fā)明自動在每個內(nèi)存塊中搜索指定數(shù)據(jù),與現(xiàn)有技術(shù)中通過人眼觀看的方式搜索數(shù)據(jù)相比,本發(fā)明不僅搜索精度較高,而且搜索時間較短,工作效率也較高。與此同時,本發(fā)明對內(nèi)存塊進(jìn)行搜索之前,預(yù)先根據(jù)內(nèi)存塊的內(nèi)存屬性(狀態(tài)屬性和保護(hù)屬性)判斷內(nèi)存塊是否需要過濾,若需要過濾,則證明該內(nèi)存塊中沒有指定數(shù)據(jù),此時不對該內(nèi)存塊進(jìn)行搜索,直接搜索其他內(nèi)存塊,進(jìn)一步縮短了搜索時間,提高了工作效率。

(2)本發(fā)明對內(nèi)存塊進(jìn)行搜索之前,還預(yù)先判斷該內(nèi)存塊的起始地址是否<0x7FFFFFFF,若不是,則證明當(dāng)前內(nèi)存塊沒有指定數(shù)據(jù),因為指定數(shù)據(jù)一般不會在起始地址≥0x7FFFFFFF的內(nèi)存塊中;此時也不對該內(nèi)存塊進(jìn)行搜索,直接搜索其他內(nèi)存塊,更進(jìn)一步縮短了搜索時間,提高了工作效率。

附圖說明

圖1為本發(fā)明實施例中的在Windows系統(tǒng)的內(nèi)存中搜索指定數(shù)據(jù)的方法的流程圖。

具體實施方式

以下結(jié)合附圖及實施例對本發(fā)明作進(jìn)一步詳細(xì)說明。

首先介紹Windows系統(tǒng)對進(jìn)程的內(nèi)存空間的劃分規(guī)則:Windows系統(tǒng)會對進(jìn)程的內(nèi)存空間,以分塊的形式進(jìn)行分布(即將內(nèi)存空間劃分為多個內(nèi)存塊),每個內(nèi)存塊都具有不同的屬性,內(nèi)存搜索只能在某些滿足要求的內(nèi)存屬性上才可以讀取內(nèi)存的數(shù)據(jù)。

在此基礎(chǔ)上,參見圖1所示,本發(fā)明實施例中的在Windows系統(tǒng)的內(nèi)存中搜索指定數(shù)據(jù)的方法,包括以下步驟:

S1:判斷需要搜索的內(nèi)存塊的起始地址Addr(例如設(shè)置Addr為0)是否<0x7FFFFFFF,若是,轉(zhuǎn)到S2,否則證明當(dāng)前內(nèi)存塊一般不會存在與需要搜索的數(shù)據(jù)(以下簡稱搜索數(shù)據(jù))相同的指定數(shù)據(jù),因為搜索數(shù)據(jù)一般不會在起始地址≥0x7FFFFFFF的內(nèi)存塊中,轉(zhuǎn)到S5。

S2:根據(jù)當(dāng)前內(nèi)存塊的起始地址、以及使用當(dāng)前內(nèi)存塊的進(jìn)程,調(diào)用內(nèi)存屬性獲取函數(shù)Windows API VirtualQueryEx獲取當(dāng)前內(nèi)存塊的內(nèi)存屬性,內(nèi)存屬性包括狀態(tài)屬性和保護(hù)屬性,轉(zhuǎn)到S3。

S2的具體流程為:

DWORD VirtualQueryEx(HANDLE hProcess,LPCVOID lpAddress,MEMORY_BASIC_INFORMATION*lpMemInfo,DWORD dwLength);其中hProcess填入需要查找的進(jìn)程,lpAddress填入Addr,lpMemInfo則是獲取到的內(nèi)存屬性結(jié)果,dwLength填入MEMORY_BASIC_INFORMATION結(jié)構(gòu)的大小。

S3:判斷當(dāng)前內(nèi)存塊的狀態(tài)屬性和保護(hù)屬性是否均不為過濾屬性,若是,則確定當(dāng)前內(nèi)存塊不需要過濾,轉(zhuǎn)到S4;否則確定當(dāng)前內(nèi)存塊需要過濾,將當(dāng)前內(nèi)存塊的搜索結(jié)果設(shè)置為:未發(fā)現(xiàn)搜索數(shù)據(jù),轉(zhuǎn)到S5。

S3中當(dāng)前內(nèi)存塊的狀態(tài)屬性的過濾屬性根據(jù)lpMemInfo結(jié)構(gòu)中的State字段(狀態(tài)字段)查看,過濾屬性包括MEM_RESERVE(保留進(jìn)程的虛擬地址空間,而不分配任何物理存儲)和MEM_FREE(內(nèi)存為空閑);當(dāng)前內(nèi)存塊的保護(hù)屬性的過濾屬性根據(jù)lpMemInfo結(jié)構(gòu)中的Protect字段查看,保護(hù)屬性包括PAGE_NOACCESS(任何訪問該區(qū)域的操作將被拒絕)和PAGE_GUARD(標(biāo)志指定了一個防護(hù)頁,即當(dāng)一個頁被提交時會因第一次被訪問而產(chǎn)生一個one-shot異常,接著取得指定的訪問權(quán)限)。

S4:判斷當(dāng)前內(nèi)存塊中是否存在數(shù)據(jù)內(nèi)容和數(shù)據(jù)長度,均與搜索數(shù)據(jù)相同的指定數(shù)據(jù),若是,記錄所有指定數(shù)據(jù)的內(nèi)存地址,作為當(dāng)前內(nèi)存塊的搜索結(jié)果,轉(zhuǎn)到S5,否則直接轉(zhuǎn)到S5。

S4中判斷當(dāng)前內(nèi)存塊中是否存在數(shù)據(jù)內(nèi)容和數(shù)據(jù)長度,均與搜索相同的指定數(shù)據(jù)的具體流程為:

For I=0;I<datas.length;

If Addr[I]=datas[I]

I=I+1

Else

I=I+1

If I=datas.length

其中datas是搜索數(shù)據(jù),datas.length是搜索數(shù)據(jù)的長度。如果I等于datas.length則說明存在,否則說明不存在。

S5:判斷所有內(nèi)存塊是否全部搜索完畢,若是,顯示所有內(nèi)存塊的搜索結(jié)果,結(jié)束;否則轉(zhuǎn)到S6。

S6:將當(dāng)前內(nèi)存塊之外的其他內(nèi)存塊作為需要搜索的內(nèi)存塊后,重新執(zhí)行S1;具體流程為:Addr=Addr+RegionSize,即將需要搜索的內(nèi)存塊的起始地址,設(shè)置為當(dāng)前內(nèi)存塊的起始地址加上當(dāng)前內(nèi)存塊的大小。

本發(fā)明實施例中的在Windows系統(tǒng)的內(nèi)存中搜索指定數(shù)據(jù)的系統(tǒng),包括內(nèi)存塊起始地址判斷模塊、內(nèi)存塊屬性獲取模塊、過濾屬性判斷模塊、內(nèi)存塊搜索模塊和內(nèi)存塊搜索遍歷模塊。

內(nèi)存塊起始地址判斷模塊用于:判斷需要搜索的內(nèi)存塊的起始地址是否<0x7FFFFFFF,若是,向內(nèi)存塊屬性獲取模塊發(fā)送內(nèi)存塊屬性獲取信號,否則向內(nèi)存塊搜索遍歷模塊發(fā)送內(nèi)存塊搜索遍歷信號。

內(nèi)存塊屬性獲取模塊用于:收到內(nèi)存塊屬性獲取信號后,根據(jù)需要搜索的內(nèi)存塊的起始地址、以及使用內(nèi)存塊的進(jìn)程,獲取內(nèi)存塊的狀態(tài)屬性和保護(hù)屬性,向過濾屬性判斷模塊發(fā)送過濾屬性判斷信號;

過濾屬性判斷模塊用于:收到過濾屬性判斷信號后,判斷內(nèi)存塊的狀態(tài)屬性和保護(hù)屬性是否均不為過濾屬性,狀態(tài)屬性的過濾屬性包括MEM_RESERVE和MEM_FREE,保護(hù)屬性的過濾屬性包括PAGE_NOACCESS和PAGE_GUARD;若是,向內(nèi)存塊搜索模塊發(fā)送內(nèi)存塊搜索信號;否則向內(nèi)存塊搜索遍歷模塊發(fā)送內(nèi)存塊搜索遍歷信號。

內(nèi)存塊搜索模塊用于:收到內(nèi)存塊搜索信號后,判斷內(nèi)存塊中是否存在數(shù)據(jù)內(nèi)容和數(shù)據(jù)長度,均與搜索數(shù)據(jù)相同的指定數(shù)據(jù),若是,記錄所有指定數(shù)據(jù)的內(nèi)存地址,否則向內(nèi)存塊搜索遍歷模塊發(fā)送內(nèi)存塊搜索遍歷信號。

內(nèi)存塊搜索遍歷模塊用于:收到內(nèi)存塊搜索遍歷信號后,判斷所有內(nèi)存塊是否全部搜索完畢,若是,顯示記錄的所有指定數(shù)據(jù)的內(nèi)存地址;否則將當(dāng)前內(nèi)存塊之外的其他內(nèi)存塊作為需要搜索的內(nèi)存塊后(將需要搜索的內(nèi)存塊的起始地址,設(shè)置為當(dāng)前內(nèi)存塊的起始地址加上當(dāng)前內(nèi)存塊的大小),重新向內(nèi)存塊屬性獲取模塊發(fā)送內(nèi)存塊屬性獲取信號。

本發(fā)明不局限于上述實施方式,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1