一、物件遍歷分析
大多數的遊戲遍歷物件(怪物、NPC、玩家、物品等等)的架構都是使用二元搜尋樹的演算法,因此熟悉演算法的同學就能很快的理解遍歷的程式碼。
rsi是樹的起始位址,rbp是結束的位址,只要rsi遍歷到與rbp相同的位址,就代表已經遍歷完成了整個物件。
mov rax, [rax],是獲取左子樹的物件。
mov rax, [rsi+8],是獲取右子樹的物件。
二、怪物的血量分析
add rax, [rbx+0x320],其中[rbx+0x320]是存取怪物的血量。
我們可以從觀察怪物的血量為679 (十六進制是2A7),這樣就能確認怪物血量的偏移位址。
三、怪物名稱分析
獲取怪物的名稱,我們會需要call [rax+c8]來獲取怪物名稱的回傳位址,那麼第一個參數(rcx)是怪物名稱表,第二個參數(rdx)是怪物名稱的識別ID,最後呼叫完的rax就是怪物名稱的資訊。
四、運行結果