注意,这不是教程楼!只是用来讨论关于背包道具种类限制的研究→_→。。。
这是我之前无意中在火红发现的一组数据,当时根本不懂这组数据的意义,当然这组数据也貌似真的没有意义==
1E4:2A 1E 0D 3A 2B 1E
但是在研究背包道具限制的时候,我发现了这组数据其实就是个别物品种类的道具限制
道具:42种
重要道具:30种
球:13种
技能机器:58种
树果:43种
最后一个1E推测为电脑储存数量,不过还未验证。
可惜事情没有改改数值就能增加上限这么简单,道具储存使用的内存是浮动的,
这张表的位置在0203988C,有5组指针,具体是指什么可以推测出来
[道具位置][种类数量][00 00][重要道具位置][种类数量][00 00]
[球位置][种类数量][00 00][技能机器位置][种类数量][00 00]
[树果位置][种类数量][00 00]
于是我跟着这张表找到了这个控制程序,在99e44。
08099E44 490F ldr r1, #0x0203988C<这里切入
08099E46 4810 ldr r0, #0x03005008
08099E48 6802 ldr r2, [r0, #0x0]
08099E4A 23C4 mov r3, #0xC4
08099E4C 009B lsl r3, r3, #0x2
08099E4E 18D0 add r0, r2, r3
08099E50 6008 str r0, [r1, #0x0]
08099E52 202A mov r0, #0x2A
08099E54 7108 strb r0, [r1, #0x4]
08099E56 33A8 add r3, #0xA8
08099E58 18D0 add r0, r2, r3
08099E5A 6088 str r0, [r1, #0x8]
当然这只是一个小小的测试,我只想让42个道具位变成200个道具位→_→。。。
。
==========================================
这段不解释,自己脑补。。。
@99E44 = 00 48 00 47 XX XX XX 08
.text
.align 2
.thumb
.thumb_func
.global bag_hijack
main:
ldr r1, items_table
ldr r0, free_ram
str r0, [r1, #0x0]
mov r0, #0xc8
strb r0, [r1, #0x4]
ldr r0, #0x03005008
ldr r2, [r0, #0x0]
mov r3, #0xc4
lsl r3, r3, #0x2
add r3, #0xA8
add r0, r2, r3
str r0, [r1, #0x8]
ldr r0, return
bx r0
.align
items_table:.word 0x0203988C
free_ram:.word 0x0203ca00
saveblock:.word 0x03005008
return:.word 0x08099E5+1
===========================================
然后进入游戏打开背包之后发现原有道具全部不翼而飞,这是因为我们使用了新的内存位置。
转到0203ca00之后就会看到一堆一直重复的数据
0000 XXXX 0000 XXXX ...
这表示我们成功把道具内存位置打死在0203ca00。
于是问题来了←_←
打死之后我们确实能继续使用这个表,但是超过42个道具的时候就会死机。
当时我只有47个道具,打开背包就黑屏了。
这时候我卡住了,毫无头绪。
个人猜测:
1.有检测程序在搞鬼。
2.翻页程序出错。
3.过度数据溢出。
4.机体限制(可能性近乎为0,但要真是这个就直接死光光了TAT)
5.我的做法错了→_→。。(极有可能,本渣技术尚差)
接下来就是讨论帖的意义了,也许之前有哪位聚聚进行了相关的研究,或谁有收集到相关的资料等都可以在这里讨论,或者这帖也能帮wu上dao同在研究这个课题的人。
这是我之前无意中在火红发现的一组数据,当时根本不懂这组数据的意义,当然这组数据也貌似真的没有意义==
1E4:2A 1E 0D 3A 2B 1E
但是在研究背包道具限制的时候,我发现了这组数据其实就是个别物品种类的道具限制
道具:42种
重要道具:30种
球:13种
技能机器:58种
树果:43种
最后一个1E推测为电脑储存数量,不过还未验证。
可惜事情没有改改数值就能增加上限这么简单,道具储存使用的内存是浮动的,
这张表的位置在0203988C,有5组指针,具体是指什么可以推测出来
[道具位置][种类数量][00 00][重要道具位置][种类数量][00 00]
[球位置][种类数量][00 00][技能机器位置][种类数量][00 00]
[树果位置][种类数量][00 00]
于是我跟着这张表找到了这个控制程序,在99e44。
08099E44 490F ldr r1, #0x0203988C<这里切入
08099E46 4810 ldr r0, #0x03005008
08099E48 6802 ldr r2, [r0, #0x0]
08099E4A 23C4 mov r3, #0xC4
08099E4C 009B lsl r3, r3, #0x2
08099E4E 18D0 add r0, r2, r3
08099E50 6008 str r0, [r1, #0x0]
08099E52 202A mov r0, #0x2A
08099E54 7108 strb r0, [r1, #0x4]
08099E56 33A8 add r3, #0xA8
08099E58 18D0 add r0, r2, r3
08099E5A 6088 str r0, [r1, #0x8]
当然这只是一个小小的测试,我只想让42个道具位变成200个道具位→_→。。。
。
==========================================
这段不解释,自己脑补。。。
@99E44 = 00 48 00 47 XX XX XX 08
.text
.align 2
.thumb
.thumb_func
.global bag_hijack
main:
ldr r1, items_table
ldr r0, free_ram
str r0, [r1, #0x0]
mov r0, #0xc8
strb r0, [r1, #0x4]
ldr r0, #0x03005008
ldr r2, [r0, #0x0]
mov r3, #0xc4
lsl r3, r3, #0x2
add r3, #0xA8
add r0, r2, r3
str r0, [r1, #0x8]
ldr r0, return
bx r0
.align
items_table:.word 0x0203988C
free_ram:.word 0x0203ca00
saveblock:.word 0x03005008
return:.word 0x08099E5+1
===========================================
然后进入游戏打开背包之后发现原有道具全部不翼而飞,这是因为我们使用了新的内存位置。
转到0203ca00之后就会看到一堆一直重复的数据
0000 XXXX 0000 XXXX ...
这表示我们成功把道具内存位置打死在0203ca00。
于是问题来了←_←
打死之后我们确实能继续使用这个表,但是超过42个道具的时候就会死机。
当时我只有47个道具,打开背包就黑屏了。
这时候我卡住了,毫无头绪。
个人猜测:
1.有检测程序在搞鬼。
2.翻页程序出错。
3.过度数据溢出。
4.机体限制(可能性近乎为0,但要真是这个就直接死光光了TAT)
5.我的做法错了→_→。。(极有可能,本渣技术尚差)
接下来就是讨论帖的意义了,也许之前有哪位聚聚进行了相关的研究,或谁有收集到相关的资料等都可以在这里讨论,或者这帖也能帮wu上dao同在研究这个课题的人。