主頁(yè) > 知識(shí)庫(kù) > Seraph 內(nèi)存搜索

Seraph 內(nèi)存搜索

熱門標(biāo)簽:雷霆電話機(jī)器人電話 安徽400電話辦理 什么渠道可以找外呼系統(tǒng)客戶 真人和電話機(jī)器人對(duì)話 湖州電銷防封卡 使用電話機(jī)器人電銷是否違法 金融電銷公司怎么辦理外呼系統(tǒng) 電話智能外呼系統(tǒng)誠(chéng)信合作 信陽(yáng)話務(wù)外呼系統(tǒng)怎么收費(fèi)
一般情況下,為了應(yīng)付游戲的動(dòng)態(tài)內(nèi)存地址,我們用基址的方式來(lái)讀取內(nèi)存,不過(guò)前提是可以知道基址。有的游戲,基址是很難分析到的,而且很多游戲加了隱藏和變換,搞的分析起來(lái)特別復(fù)雜。這個(gè)時(shí)候,借助Seraph,我們可以用另一種方式——搜索內(nèi)存。

雖然找不出基址,但是我們可以很輕松的找到一些我們想要的數(shù)據(jù)的直接地址。比如我們?cè)谝淮斡螒虻倪\(yùn)行里,可以用CE找到血的地址是H900010, 血最大值的地址是H900014,MP地址H900020,最大MPH900024。

雖然下一次游戲運(yùn)行時(shí),這些地址都會(huì)變,但是我們知道,這些地址互相間的相對(duì)地址偏移是不變的。也就是說(shuō)最大血地址=血地址+4,MP地址=血地址+H10
這樣我們就可以搜索了。舉個(gè)例子,我們知道我們的血/最大血/MP/最大MP分別是8000/8000/12000/12000。那么在腳本里,告訴Seraph的內(nèi)存搜索引擎,我們要搜索一個(gè)地址,它的值是8000,這個(gè)地址+4的值也是8000,這個(gè)地址+H10和+H14的值是12000。這樣的地址,一般在游戲里只有一個(gè)。
怎么搜索呢?
復(fù)制代碼 代碼如下:

ClearSearchMemoryTable()
AddSearchMemoryItem(H900010, 2, 8000)
AddSearchMemoryItem(H900014, 2, 8000)
AddSearchMemoryItem(H900020, 2, 12000)
AddSearchMemoryItem(H900024, 2, 12000)
if SearchMemory(H000000, Address) then
Print("找到地址:"Address)
end if


注意,以上代碼里,我們調(diào)用AddSearchMemoryItem函數(shù)來(lái)設(shè)置一些我們要搜索的條件。
第一個(gè)參數(shù)是每個(gè)值的地址。不用擔(dān)心這個(gè)地址在下一次游戲運(yùn)行時(shí)不正確,Seraph搜索只關(guān)心所有添加的搜索項(xiàng)之間的“相對(duì)地址”。
第二個(gè)參數(shù)是指定類型,2代表四字節(jié)整型。我們同樣可以添加雙字節(jié),浮點(diǎn)數(shù),以及字符串等不同類型。詳見(jiàn)幫助手冊(cè)。
第三個(gè)參數(shù)就是這個(gè)搜索項(xiàng)的值。你必須填入這個(gè)數(shù)據(jù)的當(dāng)前值,如果填錯(cuò)了,就搜不到了。(關(guān)于怎么在腳本里指定當(dāng)前的用于搜索的值,我們之后講)
注意,第一行的ClearSearchMemoryTable()是用于清除上一次添加的搜索項(xiàng)。重新開始一次搜索前我們都要調(diào)一上這個(gè)函數(shù)。
添加完了這4個(gè)搜索項(xiàng)以后,我們用SearchMemory開始搜索。第一個(gè)參數(shù)表示搜索的開始值,我們一般都可以用H000000。第二個(gè)參數(shù)值用于返回搜索到的結(jié)果。
搜到的結(jié)果就是第一個(gè)搜索項(xiàng)的地址,也就是當(dāng)前血的地址。我們可以保存這個(gè)地址,用ReadMemory隨時(shí)去讀數(shù)據(jù)。

那么,整體的流程應(yīng)該是:
1. 在參數(shù)設(shè)置里,我們添加一些參數(shù),用于填入搜索的數(shù)據(jù)。告訴用戶在腳本開始前,先設(shè)置這些數(shù)據(jù)。比如,填入自己的血,MP,并在紅藍(lán)滿的時(shí)候開始腳本。
2. 在腳本一開始,用GetConfigNumber等函數(shù)取出設(shè)置的值,用以上代碼搜索內(nèi)存,把得到的數(shù)據(jù)保存下來(lái)
3. 在腳本運(yùn)行中,用保存下的地址,加上各種我們已經(jīng)知道的偏移量,隨時(shí)讀取各項(xiàng)數(shù)據(jù)的值。

小技巧:

怎樣添加搜索項(xiàng)才可以最方便準(zhǔn)確的搜索到我想要的那個(gè)唯一的內(nèi)存地址?
當(dāng)然是與角色越相關(guān)越好的。比如角色的各項(xiàng)屬性值。使用更多的搜索項(xiàng)可以有效的防止搜索的不準(zhǔn)確(即搜到不止一個(gè)地址),但是也會(huì)帶來(lái)每次啟動(dòng)腳本時(shí)的麻煩,因?yàn)槲覀儐?dòng)時(shí)都要設(shè)置一下搜索值。建議用一些不經(jīng)常變的值,比如,等級(jí),攻擊值等,只有升了級(jí)才會(huì)變。而血值是經(jīng)常變的。
同時(shí),根據(jù)我們的經(jīng)驗(yàn),角色名字是很好的一個(gè)搜索項(xiàng)。如果我們可以分析到角色名字的地址,加在搜索項(xiàng)里(字串型),一般就可以很準(zhǔn)確的搜索到結(jié)果。
一般的游戲角色名是UTF8形式的。我們可能要先將角色名用GBToUTF8函數(shù)轉(zhuǎn)換成UTF8編碼的字串,再用AddSearchMemoryItem添加。

如果有時(shí)候我們添加的數(shù)項(xiàng)不夠,或者我們?cè)谡{(diào)試自己腳本的時(shí)候,會(huì)搜索到不同的內(nèi)存地址,我們想讓腳本全部輸出,怎么辦?
復(fù)制內(nèi)容到剪貼板
代碼:
AddSearchMemoryItem(...)
AddSearchMemoryItem(...)
...
Address=0
while SearchMemory(Address+1, Address)
  Print("找到地址:"Address)
wend
原理就是從0開始,每搜索到一個(gè)地址,先輸出,然后從這個(gè)地址+1繼續(xù)往下搜,一直到搜不到為止。

標(biāo)簽:運(yùn)城 鶴崗 山南 岳陽(yáng) 六盤水 濟(jì)南 湛江 德州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Seraph 內(nèi)存搜索》,本文關(guān)鍵詞  Seraph,內(nèi)存,搜索,Seraph,內(nèi)存,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Seraph 內(nèi)存搜索》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Seraph 內(nèi)存搜索的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章