015 已接任务链表和任务库二叉树遍历
文章目錄
- 任務名字庫
- 已接任務
對于游戲的任務數據來說,分為三大塊,已接任務,可接任務和任務庫。對于任務數據來說,一般都是從名字入手
任務名字庫
首先來找任務的名字庫
從任務名字入手
直接搜索名字,然后把中間的這一塊連續地址的任務名字拉下來。這一塊很明顯就是屬于任務庫里的內容,只要下訪問斷點,就能追到相關的數據結構
在蘇醒一的地址下斷,然后點開任務面板,點擊全部追蹤
此時斷點斷下
返回上層,這里要追rcx
再返回上層,這里要追r8,得到下面的偏移
rsi+0x74rsi來源于rdx
返回上層,rdx來源于r12
r12來源于rdx
再返回上層,rdx來源于r12
r12來源于rax,這里就追到了和之前一樣的call,這個call是傳入ID和二叉樹基地址,從里面獲取任務對象
接著進call里面追rax,rax來源于[rax+0x20]
[rax+0x20]+0x74rax來源于r8
r8來源于rax,然后就進到了二叉樹
二叉樹的根節點rax來源于[r8+0x8],來源于[rcx+0x10]
最后rcx來源于基地址。這樣我們就能拿到一個完整的任務庫,通過這個任務庫可以獲取到任務名字
任務庫二叉樹根節點 [[0x00007FF6A7B98A90+8]+0x10] +0 左子樹 +10 右子樹 +18 任務ID +29 結束標志任務名字表達式:[rax+0x20]+0x74 +20 任務對象[任務對象+0x74] 任務名字 --------------------通過調用call傳入任務ID可以拿到任務名字------------------------ 任務名字庫二叉樹偏移:0x2F78A90 call偏移:0xCB1E60已接任務
接著回到這個位置分析edi,也就是任務ID的來源,通過任務ID找到一個保存所有已接任務ID的數據結構。
edi來源于edx
edx來源于esi
esi來源于r8
r8來源于edi
edi來源于[rbx+0x10]
[rbx+0x10]在這個位置下斷,然后一直單步,會發現一直處在循環里面,這個地方實際上是一個鏈表
鏈表的節點是rbx,結束條件是判斷[rsi]
接著再追rbx的值,rbx來源于[rcx]
[rcx]那么這里就是鏈表的根節點
rcx來源于[rax]來源于call
[[rax]]rax來源于[r13+0x35C]
[[r13+0x35C]]r13來源于rcx
rcx來源于rax,來源于call
來源于基地址
[[0x00007FF6A7B98A90+0x35C]]接著整理下數據
已接任務鏈表根節點 [[0x00007FF6A7B98A90+0x35C]] 偏移:2F78A90 +0 下一個節點任務ID表達式=[rbx+0x10] +10 已接任務ID 通過這個鏈表可以拿到所有已接任務的IDGithub:https://github.com/TonyChen56/GameReverseNote
完整代碼:https://download.csdn.net/download/qq_38474570/79498815
任務ID表達式=[rbx+0x10]
+10 已接任務ID
通過這個鏈表可以拿到所有已接任務的ID
總結
以上是生活随笔為你收集整理的015 已接任务链表和任务库二叉树遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 014 怪物过滤的设计和实现
- 下一篇: Windows保护模式学习笔记(一)——