Чем дальше в лес.....
Цитата:
Сообщение от ScythLab
Для начала нужно найти созданный объект User, дальше просматриваешь его VMT (Virtual method table), и в Ida изучаешь, что делает каждый метод :-)
|
VMT первый член? У объекта User первый член - 0...
Цитата:
Сообщение от ScythLab
попробуй покопай пакет MagicEffectIcons (0х85), там где-то должен быть обработчик этого пакета, если найдешь его, то скорей всего найдешь где хранятся бафы.
|
За наводку спасибо, как то пропустил этот пакет, но... где таблица обработчиков, какой объект обрабатывает? UNH?
Там же, если я всё правильно понимаю, порядок вызовов такой: DispatchNetworkQueue->ТотСамыйОбработчик->UGameEngine::OnXXX?
Взял для примера OnUserInfo, то ли Идой пользоваться не умею, то ли в упор не вижу, откуда она вызывается.
Всё таки, вроде нашёл обработчик. Имя правда немного другое.
Код:
.text:203EF5B0 sub_203EF5B0 proc near ; DATA XREF: sub_20479CD0+CC3o
.text:203EF5B0
.text:203EF5B0 var_44 = byte ptr -44h
.text:203EF5B0 var_24 = dword ptr -24h
.text:203EF5B0 var_20 = dword ptr -20h
.text:203EF5B0 var_1C = dword ptr -1Ch
.text:203EF5B0 var_18 = dword ptr -18h
.text:203EF5B0 var_14 = dword ptr -14h
.text:203EF5B0 var_10 = dword ptr -10h
.text:203EF5B0 var_C = dword ptr -0Ch
.text:203EF5B0 var_4 = dword ptr -4
.text:203EF5B0 arg_0 = dword ptr 8
.text:203EF5B0 arg_4 = dword ptr 0Ch
.text:203EF5B0
.text:203EF5B0 push ebp
.text:203EF5B1 mov ebp, esp
.text:203EF5B3 push 0FFFFFFFFh
.text:203EF5B5 push offset SEH_203EF5B0
.text:203EF5BA mov eax, large fs:0
.text:203EF5C0 push eax
.text:203EF5C1 mov large fs:0, esp
.text:203EF5C8 sub esp, 38h
.text:203EF5CB push ebx
.text:203EF5CC push esi
.text:203EF5CD push edi
.text:203EF5CE mov [ebp+var_10], esp
.text:203EF5D1 xor ebx, ebx
.text:203EF5D3 mov [ebp+var_4], ebx
.text:203EF5D6 mov [ebp+var_14], ebx
.text:203EF5D9 mov ecx, ?GL2Console@@3PAVUL2ConsoleWnd@@A ; UL2ConsoleWnd * GL2Console
.text:203EF5DF mov eax, [ecx]
.text:203EF5E1 mov edx, [eax+31Ch]
.text:203EF5E7 call edx
.text:203EF5E9 lea eax, [ebp+var_14]
.text:203EF5EC push eax
.text:203EF5ED push offset asc_205098C8 ; "h"
.text:203EF5F2 mov ecx, [ebp+arg_0]
.text:203EF5F5 mov edx, [ecx+48h]
.text:203EF5F8 push edx
.text:203EF5F9 mov eax, [ebp+arg_4]
.text:203EF5FC call sub_203D9BA0
.text:203EF601 add esp, 0Ch
.text:203EF604 mov edi, eax
.text:203EF606 movsx eax, word ptr [ebp+var_14]
.text:203EF60A lea eax, [eax+eax*2+1]
.text:203EF60E push eax
.text:203EF60F lea ecx, [ebp+var_44]
.text:203EF612 call ??0L2ParamStack@@QAE@H@Z ; L2ParamStack::L2ParamStack(int)
.text:203EF618 mov byte ptr [ebp+var_4], 1
.text:203EF61C movsx eax, word ptr [ebp+var_14]
.text:203EF620 cdq
.text:203EF621 push edx
.text:203EF622 push eax
.text:203EF623 lea ecx, [ebp+var_44]
.text:203EF626 mov esi, ?PushBack@L2ParamStack@@QAEH_J@Z ; L2ParamStack::PushBack(__int64)
.text:203EF62C call esi ; L2ParamStack::PushBack(__int64)
.text:203EF62E mov [ebp+var_18], ebx
.text:203EF631
.text:203EF631 loc_203EF631: ; CODE XREF: sub_203EF5B0+DDj
.text:203EF631 movsx ecx, word ptr [ebp+var_14]
.text:203EF635 cmp [ebp+var_18], ecx
.text:203EF638 jge short loc_203EF68F
.text:203EF63A mov [ebp+var_1C], ebx
.text:203EF63D mov [ebp+var_20], ebx
.text:203EF640 mov [ebp+var_24], ebx
.text:203EF643 lea edx, [ebp+var_24]
.text:203EF646 push edx
.text:203EF647 lea eax, [ebp+var_20]
.text:203EF64A push eax
.text:203EF64B lea ecx, [ebp+var_1C]
.text:203EF64E push ecx
.text:203EF64F push offset aDhd ; "dhd"
.text:203EF654 mov edx, [ebp+arg_0]
.text:203EF657 mov eax, [edx+48h]
.text:203EF65A push eax
.text:203EF65B mov eax, edi
.text:203EF65D call sub_203D9BA0
.text:203EF662 add esp, 14h
.text:203EF665 mov edi, eax
.text:203EF667 mov eax, [ebp+var_1C]
.text:203EF66A cdq
.text:203EF66B push edx
.text:203EF66C push eax
.text:203EF66D lea ecx, [ebp+var_44]
.text:203EF670 call esi ; L2ParamStack::PushBack(__int64)
.text:203EF672 movsx eax, word ptr [ebp+var_20]
.text:203EF676 cdq
.text:203EF677 push edx
.text:203EF678 push eax
.text:203EF679 lea ecx, [ebp+var_44]
.text:203EF67C call esi ; L2ParamStack::PushBack(__int64)
.text:203EF67E mov eax, [ebp+var_24]
.text:203EF681 cdq
.text:203EF682 push edx
.text:203EF683 push eax
.text:203EF684 lea ecx, [ebp+var_44]
.text:203EF687 call esi ; L2ParamStack::PushBack(__int64)
.text:203EF689 add [ebp+var_18], 1
.text:203EF68D jmp short loc_203EF631
.text:203EF68F ; ---------------------------------------------------------------------------
.text:203EF68F
.text:203EF68F loc_203EF68F: ; CODE XREF: sub_203EF5B0+88j
.text:203EF68F mov ecx, ?GL2Console@@3PAVUL2ConsoleWnd@@A ; UL2ConsoleWnd * GL2Console
.text:203EF695 mov edx, [ecx]
.text:203EF697 lea eax, [ebp+var_44]
.text:203EF69A push eax
.text:203EF69B mov edx, [edx+320h]
.text:203EF6A1 call edx
.text:203EF6A3 movsx eax, word ptr [ebp+var_14]
.text:203EF6A7 push eax
.text:203EF6A8 push offset aReceiveAbnorma ; "(Receive)AbnormalStatusUpdatePacket : %"...
.text:203EF6AD mov ecx, ?GNetworkLog@@3PAVFOutputDevice@@A ; FOutputDevice * GNetworkLog
.text:203EF6B3 mov edx, [ecx]
.text:203EF6B5 push edx
.text:203EF6B6 call ?Logf@FOutputDevice@@QAAXPB_WZZ ; FOutputDevice::Logf(wchar_t const *,...)
.text:203EF6BC add esp, 0Ch
.text:203EF6BF mov byte ptr [ebp+var_4], bl
.text:203EF6C2 lea ecx, [ebp+var_44]
.text:203EF6C5 call ??1L2ParamStack@@QAE@XZ ; L2ParamStack::~L2ParamStack(void)
.text:203EF6CB xor al, al
.text:203EF6CD mov ecx, [ebp+var_C]
.text:203EF6D0 mov large fs:0, ecx
.text:203EF6D7 pop edi
.text:203EF6D8 pop esi
.text:203EF6D9 pop ebx
.text:203EF6DA mov esp, ebp
.text:203EF6DC pop ebp
.text:203EF6DD retn
.text:203EF6DD sub_203EF5B0 endp
Что в нём происходит непонятно, особенно
Код:
.text:203EF68F mov ecx, ?GL2Console@@3PAVUL2ConsoleWnd@@A ; UL2ConsoleWnd * GL2Console
.text:203EF695 mov edx, [ecx]
.text:203EF697 lea eax, [ebp+var_44]
.text:203EF69A push eax
.text:203EF69B mov edx, [edx+320h]
.text:203EF6A1 call edx
По идее, где то внутри, должен быть вызов APawn::UpdateAbnormalState(APawn *this, float), потому что ничего похожего со словом Abnormal больше нету, но либо чего то неэкспортируемого или вообще хз, этот call edx меня вводит в ступор.
Хотя, внутри UpdateAbnormalState тоже ничего хорошего - там вроде как оперируются видимые эффекты, так что это либо всё таки обработчик не тот (ну есть однозначный ShortBuffStatusUpdate, но хз используется ли он или, и там тоже call edx ведущий не понятно куда), либо хз.