Search ValidAddr 로 기본 주 소 를 검색 하 는 예
3591 단어 SearchValidAddr검색 기반
#SetArgsOnCompile
# 。 。
# :
# HP MP , 。 。
# " " , , " "。
# , , 。
# , , , 。
dim myHP, myMP
function LogPrint(msg)
Print(msg)
WriteLog(" .txt", msg)
end function
function HexStr(num)
str=""
while num>0
n=num mod 16
if n<10 then
str=Chr(n+ASC("0"))&str
else
str=Chr(n-10+ASC("A"))&str
end if
num=num\16
wend
HexStr=str
end function
function TryAddr(byref addFirst)
TryAddr=false
if not SearchValidAddr(addFirst, &H0000000, addResult) then
exit function
end if
addFirst=addResult
if not ReadMemoryEx(addFirst, 2, Number1, 1) then
exit function
end if
addSecond=Number1+40
if not ReadMemoryEx(addSecond, 2, Number3, 1) then
exit function
end if
addNowBlood=Number3+596
addAllBlood=addNowBlood+&h18
addNowMP=addNowBlood+&h4
addAllMP=addNowBlood+&h1c
if not ReadMemoryEx(addNowBlood, 2, NowBlood, 1) then
exit function
end if
if NowBlood<>myHP then
exit function
end if
if not ReadMemoryEx(addAllBlood, 2, AllBlood, 1) then
exit function
end if
if AllBlood<>myHP then
exit function
end if
if not ReadMemoryEx(addNowMP, 2, NowMP, 1) then
exit function
end if
if NowMP<>myMP then
exit function
end if
if not ReadMemoryEx(addAllMP, 2, AllMP, 1) then
exit function
end if
if AllMP<>myMP then
exit function
end if
TryAddr=true
end function
function main
dim progress[11]
for i=1 to 11
progress[i]=false
next
myHP=GetConfigNumber(" ")
myMP=GetConfigNumber(" MP ")
startAddr=CNum(GetConfigString(" "))
endAddr=CNum(GetConfigString(" "))
Print(" :&H"& HexStr(startAddr))
Print(" :&H"& HexStr(endAddr))
Print(" HP :"&myHP)
Print(" MP :"&myMP)
LogPrint(" .....")
for addr=startAddr to endAddr step 4
if TryAddr(addr) then
LogPrint(" : &H"& HexStr(addr))
end if
prg=Int((addr-startAddr)/(endAddr-startAddr)*10)
if prg>10 then
prg=10
end if
if not progress[prg+1] then
Print(" %"&(prg*10))
progress[prg+1]=true
end if
next
end function
위의 코드 는 COPY 의 주선 이 기본 주 소 를 검색 하 는 데 사용 하 는 코드 입 니 다.내 가 원 리 를 설명 할 게.주선 리,피의 주 소 는[[[기본 주소]+40]+596]입 니 다.바로 기본 주소 에서 데 이 터 를 읽 고+40 을 읽 은 다음 에 데 이 터 를 읽 으 면 596 입 니 다.데 이 터 를 읽 으 면 피의 주소 입 니 다.우 리 는 기본 주 소 를 검색 하 는 원 리 는 이 공식 을 알 지만 기본 주 소 는 바 뀌 었 습 니 다.우 리 는 이 공식 을 통 해 매개 변수 설정 과 일치 하 는 혈액 값 을 찾 을 때 까지 대체적인 범위 에서 하나씩 기본 주소 로 시험 합 니 다.SearchValidAddr 는 내 재 된 지정 주소 부터 주 소 를 찾 을 때 까지 다음 주 소 를 찾 습 니 다.그의 값 은 우리 가 지정 한 값(이 예 는 0)보다 크 고 이 주 소 를 되 돌려 줍 니 다.그럼 왜 우 리 는 순환 을 써 서 ReadMemory Ex 로 하나씩 읽 을 수 없 는 지 물 어 봐 야 한다.정 답 은 이 함수 로 속도 가 1000 배 빠르다 는 것 이다.그 주 소 를 찾 은 후에 우 리 는 Read Memory Ex 로 읽 었 습 니 다.당연히 읽 기 에 실 패 했 을 수도 있 습 니 다.판단 해 야 합 니 다.읽 으 면 그 공식 에 따라 3 급 주 소 를 읽 고 데 이 터 를 읽 어 보 세 요.데 이 터 를 읽 을 때 까지 읽 고 지정 한 값 과 일치 합 니 다.그럼 이 건 기본 주소 일 수도 있다 고 하 겠 습 니 다.