war3 1.24单机游戏 守卫剑阁分析
6F342D20 56 push esi
6F342D21 8BF1 mov esi,ecx ecx=19A100B8
6F342D23 8B86 90010000 mov eax,dword ptr ds:[esi+0x190] ; 获取第一个物品栏物品内容,esi=19A000B8,eax=19A100B8,这里的esi很有可能就是玩家对象
6F342D29 85C0 test eax,eax
6F342D2B 74 3D je XGame.6F342D6A
6F342D2D 57 push edi
6F342D2E 8B7C24 0C mov edi,dword ptr ss:[esp+0xC] ;物品数量给edi
6F342D32 89B8 C0050000 mov dword ptr ds:[eax+0x5C0],edi ; 物品数量写入背包
6F342D38 83BE 94010000 0>cmp dword ptr ds:[esi+0x194],0x0 ; 可能是物品对象,esi=19A000B8
6F36A65C 8B74C2 04 mov esi,dword ptr ds:[edx+eax*8+0x4] ; esi来源,eax可能是背包索引
6F36A653 8B91 30010000 mov edx,dword ptr ds:[ecx+0x130] edx来源,ecx=199E00B0
6F35F869 8B8D 48010000 mov ecx,dword ptr ss:[ebp+0x148] ecx=199E00B0,ebp=194D0088
6F2F90CE 8B8E C4030000 mov ecx,dword ptr ds:[esi+0x3C4] esi=18660088,ecx=194D0088




通过倒数第二个位置+0x10来遍历背包
第一格物品内容如下:

雌雄一对剑加血调用
6F383F27 51 push ecx
6F383F28 8BCE mov ecx,esi ; esi=19180088(玩家对象),edi可能是物品栏索引
6F383F2A E8 41DAFFFF call Game.6F381970 ; 使用物品
6F381970 6A FF push -0x1 ; 选择使用物品
6F381972 68 3843836F push Game.6F834338
6F381977 64:A1 00000000 mov eax,dword ptr fs:[0]
6F38197D 50 push eax
6F38197E 83EC 18 sub esp,0x18
6F381981 53 push ebx
6F381982 55 push ebp
6F381983 56 push esi
6F381984 57 push edi
6F381985 A1 6041AC6F mov eax,dword ptr ds:[0x6FAC4160]
6F38198A 33C4 xor eax,esp
6F38198C 50 push eax
6F38198D 8D4424 2C lea eax,dword ptr ss:[esp+0x2C]
6F381991 64:A3 00000000 mov dword ptr fs:[0],eax
6F381997 894C24 24 mov dword ptr ss:[esp+0x24],ecx
6F38199B E8 C0E21B00 call Game.6F53FC60
6F3819A0 85C0 test eax,eax
6F3819A2 0F85 D4010000 jnz Game.6F381B7C
6F3819A8 8B4424 3C mov eax,dword ptr ss:[esp+0x3C]
6F3819AC 8B78 0C mov edi,dword ptr ds:[eax+0xC] ; 外面的callpush ecx+C的地址保存的是物品的地址18E50438
6F3819AF 85FF test edi,edi ; +C=18e50438
6F3819B1 0F84 C5010000 je Game.6F381B7C
6F3819B7 8B40 10 mov eax,dword ptr ds:[eax+0x10] ; +10=可能是物品栏的小键盘索引
6F3819BA 8B8F 90010000 mov ecx,dword ptr ds:[edi+0x190]
6F3819C0 50 push eax
6F3819C1 E8 AA6AFBFF call Game.6F338470
6F3819C6 8BF0 mov esi,eax ; ecx=100006可能是个编号
6F3819C8 83FE FF cmp esi,-0x1
6F3819CB 0F84 AB010000 je Game.6F381B7C
6F3819D1 8B8F 90010000 mov ecx,dword ptr ds:[edi+0x190] ; 物品栏物品地址
6F3819D7 8B41 04 mov eax,dword ptr ds:[ecx+0x4] ; 可能是物品数量
这篇博客详细分析了War3 1.24单机游戏守卫剑阁中的物品栏操作,从汇编代码层面揭示了如何获取和设置物品内容,以及物品使用的调用流程。通过对内存地址的跟踪,解释了如何遍历背包和识别物品对象,特别是雌雄一对剑的使用调用过程。
2100

被折叠的 条评论
为什么被折叠?



