首页
社区
课程
招聘
[原创]新手分析TX的XXXX游戏任务链表结构
发表于: 2014-5-12 12:31 8467

[原创]新手分析TX的XXXX游戏任务链表结构

2014-5-12 12:31
8467

有朋友让我用ANSI C写某游戏的任务链表遍历,做为一名新手,在向大牛们学习的同时,向和我一样的新手共享心得是我们义无反顾的责任和义务

//先定位到任务链表的地址lpListPtr = 0x1C0A6A38
//
1C0A6A38  34 35 64 34 CC 7D 71 01 C4 7D 71 01 BC 7D 71 01  45d4蘿q 膤q 紏q
1C0A6A48  60 88 1D 13 05 00 00 00 00 00 00 00 38 7F 71 01  `?  .......8q
1C0A6A58  30 7F 71 01 28 7F 71 01 D8 8B C5 1D 08 01 00 00  0q (q 貗?  ..
1C0A6A68  00 00 80 40 01 00 00 00 10 2F 30 34 01 00 00 00  ..€@ ... /04 ...
1C0A6A78  BC 7E 71 01 00 00 00 00 01 00 00 00 91 01 00 00  紐q .... ...?..
1C0A6A88  00 00 00 00 00 00 00 00 20 79 FE 11 AF EF 00 88  ........ y?.?
1C0A6A98  3C 66 6F 6E 74 20 63 6F 6C 6F 72 3D 22 30 78 46  <font color="0xF
1C0A6AA8  46 46 46 46 46 46 46 22 3E D7 EE D0 A1 CE EF C0  FFFFFFF">最小物?
1C0A6AB8  ED B9 A5 BB F7 C1 A6 3D 20 31 34 30 20 2B 20 3C  砉セ髁? 140 + <

//不难发现0x131D8860 (lpListPtr+0x10的内容)即是结点开始指针,而0x00000005(lpListPtr +0x14的内容)是当前链表的结点数量

//去0x131D8860看看,发现这个结点的内容是大片的空数据
//只有前12字节是链表的三个指针,暂把这个定为ROOT节点吧
//反正也就5个结点,从第一个指针找,顶多把5个都找齐
131D8860  20 8F 1D 13 00 A0 1D 13 B0 A1 1D 13 00 00 00 00   ? .? 啊  ....
131D8870  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
131D8880  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
131D8890  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

//先从0x131D8F20开始,发现此结点内开始有数据了,把这个结点定为1号吧
131D8F20  60 88 1D 13 00 A0 1D 13 50 9E 1D 13 B8 00 00 00  `? .? P? ?..
131D8F30  B8 00 00 00 03 00 00 00 00 00 DE 07 04 18 09 00  ?.. .....?  ..
131D8F40  1C 14 74 79 00 00 00 00 00 00 00 00 00 00 01 03    ty..........  
131D8F50  7D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  }...............

//从上面两个结点不难发现,两个结点的父结点(暂定中间结点为父结点)指向同一个地址,//先去看看这个0x131DA000地址内容

131DA000  20 8F 1D 13 60 88 1D 13 D0 90 1D 13 FC 13 00 00   ? `? 袗  ?..
131DA010  FC 13 00 00 01 00 00 00 00 00 DE 07 05 0C 09 00  ?.. .....? ...
131DA020  11 32 00 00 00 00 00 00 00 00 00 00 00 00 01 03   2............  
131DA030  7D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  }...............

//从上面这个结点看,它的父指针正好是指向了0x131D8860 (ROOT结点),而ROOT结点
//的父指针又指了回来,我们自己用C++写二叉树时,ROOT结点的父指针一般为NULL,//这里是游戏自己的链表,谁知道又代表了什么意义呢,我们目的是分析它并找到他的结构//型态,实现遍历就行了,这里就不纠结这个问题了,继续!
//看来把0x131D8F2定为1号节点有可能是错误的,应该把0x131DA000定为1号结点(因//为它的父指针指向了ROOT),还是画个简易图,从ROOT按图索骥吧



//先找左结点0x131D8F20,刚才已经找过这个结点了,现在把内容复制过来看看,果然其
//父结点是指向1号结点的,完善一下简图

131D8F20  60 88 1D 13 00 A0 1D 13 50 9E 1D 13 B8 00 00 00  `? .? P? ?..
131D8F30  B8 00 00 00 03 00 00 00 00 00 DE 07 04 18 09 00  ?.. .....?  ..
131D8F40  1C 14 74 79 00 00 00 00 00 00 00 00 00 00 01 03    ty..........  
131D8F50  7D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  }...............



//左边和右都返回到ROOT结点去了,形成了循环,说明结束了,就不必看了
//此时0x131D9E50必为叶子无疑

131D9E50  60 88 1D 13 20 8F 1D 13 60 88 1D 13 DC 13 00 00  `?  ? `? ?..
131D9E60  DC 13 00 00 03 00 00 00 00 00 DE 07 05 0C 09 00  ?.. .....? ...
131D9E70  16 12 C3 60 2E 00 00 00 00 00 05 00 05 00 04 01    胉...... . .  
131D9E80  3F 26 1F 00 00 00 00 00 02 34 B1 00 00 00 00 00  ?&¬..... 4?....



//此时剩下了0x131D90D0,看看这个结点的数据
//左边结点也指向了ROOT,结束了;再看右边指向了0x131DA1B0
131D90D0  60 88 1D 13 00 A0 1D 13 B0 A1 1D 13 25 14 00 00  `? .? 啊  % ..
131D90E0  25 14 00 00 01 00 00 00 00 00 DE 07 04 0F 17 00  % .. .....?   .
131D90F0  0A 12 10 27 00 00 00 00 00 00 00 00 00 00 01 03  .  '..........  
131D9100  7D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  }...............



//接下来看0x131DA1B0,这个应该是最后一个结点了,看看三个指针,果然左右结点指针都指向了ROOT结点
131DA1B0  60 88 1D 13 D0 90 1D 13 60 88 1D 13 8C 1B 00 00  `? 袗  `? ?..
131DA1C0  AF 26 00 00 01 00 00 00 00 00 DE 07 05 0C 09 00  ?.. .....? ...
131DA1D0  15 0C F6 51 4C 00 00 00 00 00 05 00 32 00 02 01   .鯭L..... .2.  
131DA1E0  39 A9 4A 00 00 00 00 00 03 7D 00 00 00 00 00 00  9㎎..... }......



//整理一下后的图:



//接下来就可以写遍历了,这个有一点要注意的是第一个节点是从ROOT的父指针过来的,//大牛可能已经看出来了,这个好像是Map链表,用Map指针遍历可能更好,我没有分
//析过Map,我是用ANSI C写的前序遍历,根据结点的个数申请一个指针数组,把每个
//结点的指针放进数组里去,最后要操作每个结点的内容的话先对数组进行指针遍历的,
//有点猥琐,粗陋浅见,望勿见笑


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 4
支持
分享
最新回复 (8)
雪    币: 2905
活跃值: (3934)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
分析得不错
2014-5-12 12:58
0
雪    币: 271
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
顶刚叔一个   哈哈
2014-5-12 13:20
0
雪    币: 3725
活跃值: (624)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
以前分析韩服的永恒之塔,和你这个类似.
循环遍历二叉树结构,找到以后是一个链表的头,里面用递归再遍历一遍链表,然后才能真正找到想要的数据.
比如:背包物品和登录时候二次密码的控件句柄就是这样的.
2014-5-12 15:50
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
大神!!小菜请问 这跟java的递归一样?
2014-5-13 19:33
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这么深澳
2014-5-13 22:58
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
刚叔 干巴得!
2014-5-16 21:09
0
雪    币: 93
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
严重鄙视楼上称呼楼主刚哥为刚叔的行为。
2014-5-16 21:49
0
雪    币: 341
活跃值: (143)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
9
好厉害。。。
2014-5-18 10:51
0
游客
登录 | 注册 方可回帖
返回
//