重要啟示

重要啟示

本人正遠門深造,估計一段時間不便更新,請多見諒

2011年12月31日 星期六

找記憶體地址備忘

1.開啟Cheat Engine,變動數值找出現時耐力值的動態位置

2.變動耐力值查看閱讀該記憶體的位置
3.記下ESI的值,已知EBX固定,並得出耐力值的偏移值2*4+16C
4.尋找ESI的位置
5.需要抓下多個嘗試, 變動耐力值查看閱讀該記憶體的位置
6.找到其中一個有可能的位置
7. 記下ESI的值,並得出二級位置的偏移值50
8.再尋找ESI的位置
9.綠色顯示的就是可能的基址,(G15S2版本兩個都正確)
10.利用指針測試是否正確


---------------------------------

瑪奇各數值內存基址
G13S2一級基址:63FC1FC8
G15S2一級基址:6413b094或6413c6e4
G15S3一級基址: 6413c0e4 或6413d734

一級基址+偏移值50=二級位址

生命值:二級位址+偏移值16C
最大生命值:二級位址+偏移值178

魔力值:二級位址+偏移值170
最大魔力值:二級位址+偏移值17C

耐力值:二級位址+偏移值174
最大耐力值:二級位址+偏移值180

---------------------------------

腳本使用例子

//瑪奇G15S2 血魔耐的記憶體基址
base = &h6413b094

//一級基址+偏移值50=二級基址
Call ReadMemory (base,2,base2)
base2 = base2+&H50
Call ReadMemory (base2,2,addr)

//各項數值的偏移值
//二級基址+偏移值=各數值的位址
curentHPaddr=addr+&H16C
maxHPaddr=addr+&H178
curentMPaddr=addr+&H170
maxMPaddr=addr+&H17C
curentSPaddr=addr+&H174
maxSPaddr=addr+&H180

//調用子程序
Call check
//輸出數值
MessageBox "curentHP: "&curentHP&" "&"MaxHP: "&MaxHP&" "&"curentMP: "&curentMP&" "&"MaxMP: "&MaxMP&" "&"curentSP: "&curentSP&" "&"MaxSP: " & MaxSP
EndScript

//檢查數值的子程序
Sub check
Call ReadMemory (curentHPaddr,2,curentHP)
Call ReadMemory (maxHPaddr,2,MaxHP)
Call ReadMemory (curentMPaddr,2,curentMP)
Call ReadMemory (maxMPaddr,2,MaxMP)
Call ReadMemory (curentSPaddr,2,curentSP)
Call ReadMemory (maxSPaddr,2,MaxSP)
End Sub