Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент > Копаем клиент

Важная информация

Копаем клиент Копаем клиент

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.12.2013, 14:05   #1
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию NetClient__ProcessMessage

Копаясь дальше в клиенте, наткнулся на такое:
Код:
char __userpurge NetClient::ProcessMessage<al>(void *this<ecx>, int edi0<edi>, int a2, int a3, int a4)
{
  int v5; // esi@1
  unsigned int v6; // ebx@1
  int v7; // edx@2
  int v8; // ecx@6
  char result; // al@11
  int v10; // ecx@12
  int v11; // ecx@19
  unsigned int v12; // eax@31
  int v13; // ecx@32
  unsigned int dwOpcode; // [sp+Ch] [bp-18h]@1
  unsigned int v15; // [sp+10h] [bp-14h]@1
  unsigned int v16; // [sp+14h] [bp-10h]@17
  unsigned int v17; // [sp+18h] [bp-Ch]@10
  unsigned int v18; // [sp+1Ch] [bp-8h]@9
  unsigned int v19; // [sp+20h] [bp-4h]@8

  ++dword_10A775C;
  v5 = (int)this;
  CDataStore__GetInt32(&dwOpcode);
  v15 = dwOpcode & 0x1EF0;
  v6 = dwOpcode;
  if ( dwOpcode & 0x1EF0
    && (v7 = dwOpcode & 0x1F54, v7 != 768)
    && (dwOpcode & 0x1C52) != 3072
    && (dwOpcode & 0x15D8) != 64
    && (dwOpcode & 0x11D8) != 72
    && (v8 = dwOpcode & 0x1D90, v8 != 2064)
    && v8 != 2192
    && (v19 = dwOpcode & 0x1472, (dwOpcode & 0x1472) != 4162)
    && (v18 = dwOpcode & 0x1492, edi0 = 4114, (dwOpcode & 0x1492) != 4114) )
  {
    v17 = dwOpcode & 0x1D50;
    if ( (dwOpcode & 0x1D50) == 1280 )
    {
      result = sub_68DE64(v5, 0, a2, dwOpcode, a3);
    }
    else
    {
      v10 = dwOpcode & 0x1ED2;
      if ( v10 == 128
        || v10 == 130
        || v7 == 516
        || (dwOpcode & 0x11D0) == 192
        || (dwOpcode & 0x1F94) == 528
        || (v16 = dwOpcode & 0x1D34, (dwOpcode & 0x1D34) == 20)
        || (dwOpcode & 0x1450) == 1104
        || (v11 = dwOpcode & 0x117A, v11 == 4362) )
      {
        result = sub_C7EDD4(v5, 0, a2, dwOpcode, a3);
      }
      else
      {
        if ( v15 == 32
          || (dwOpcode & 0x1FD4) == 640
          || (dwOpcode & 0x1D94) == 144
          || (dwOpcode & 0x157E) == 272
          || v19 == 4194
          || v18 == 5138 )
        {
          result = sub_68EA8F(0, a2, dwOpcode, a3);
        }
        else
        {
          if ( v17 == 1024 || v16 == 52 || v19 == 1040 || v19 == 1042 || v11 == 4394 )
          {
            result = sub_C653F2(0, a2, dwOpcode, a3);
          }
          else
          {
            (*(void (__thiscall **)(int, unsigned int))(*(_DWORD *)v5 + 68))(v5, dwOpcode);
            v12 = v6 & 1 | ((v6 & 0xC | ((v6 & 0xFE0 | (v6 >> 1) & 0x7000) >> 1)) >> 1);
            if ( (v6 & 0x1012) == 4096 && (v13 = *(_DWORD *)(v5 + 4 * v12 + 1360)) != 0 )
              result = ((int (__cdecl *)(_DWORD, unsigned int, int, int))(v13 - ((v6 | (v6 << 16)) ^ 0x62A3A31D)))(
                         *(_DWORD *)(v5 + 4 * v12 + 9552),
                         v6,
                         a2,
                         a3);
            else
              result = (*(int (**)(void))(*(_DWORD *)a3 + 24))();
          }
        }
      }
    }
  }
  else
  {
    result = sub_658438(edi0, v5, v5, 0, a2, dwOpcode, a3);
  }
  return result;
}
а дальше еще хуже:
Код:
char __userpurge sub_658438<al>(int a1<edi>, int a2<esi>, int ecx0<ecx>, int a3, int a4, unsigned __int16 a5, int a6)
{
 ..........................
  sub_A6EED0(0x466Cu, ecx0);
  v92 = a2;
  if ( !(a5 & 0x1EF0) )
  {
    v8 = a5 & 0xF | ((a5 & 0x100 | ((unsigned int)a5 >> 4) & 0xE00) >> 4);
    goto LABEL_19;
  }
  v9 = 768;
  v91 = a1;
  if ( (a5 & 0x1F54) == 768 )
  {
    v8 = (a5 & 3 | ((a5 & 8 | ((a5 & 0x20 | (((unsigned __int8)(a5 & 0x80) | ((unsigned int)a5 >> 5) & 0x700) >> 1)) >> 1)) >> 1))
       + 32;
    goto LABEL_19;
  }
  if ( (a5 & 0x1C52) == 3072 )
  {
    v8 = (a5 & 1 | ((a5 & 0xC | ((a5 & 0x20 | ((a5 & 0x380 | ((unsigned int)a5 >> 3) & 0x1C00) >> 1)) >> 1)) >> 1)) + 64;
    goto LABEL_19;
  }
  if ( (a5 & 0x15D8) == 64 )
  {
    v8 = (a5 & 7 | ((a5 & 0x20 | ((a5 & 0x200 | ((a5 & 0x800 | ((unsigned int)a5 >> 1) & 0x7000) >> 1)) >> 3)) >> 2))
       + 192;
    goto LABEL_19;
  }
  if ( (a5 & 0x11D8) == 72 )
  {
    v8 = (a5 & 7 | ((a5 & 0x20 | ((a5 & 0xE00 | ((unsigned int)a5 >> 1) & 0x7000) >> 3)) >> 2)) + 256;
    goto LABEL_19;
  }
  if ( (a5 & 0x1D90) == 2064 )
  {
    v8 = (a5 & 0xF | ((a5 & 0x60 | ((a5 & 0x200 | ((unsigned int)a5 >> 3) & 0x1C00) >> 2)) >> 1)) + 384;
    goto LABEL_19;
  }
  if ( (a5 & 0x1D90) == 2192 )
  {
    v9 = 512;
    v10 = (a5 & 0x200 | ((unsigned int)a5 >> 3) & 0x1C00) >> 2;
    v11 = a5 & 0x60;
    v12 = a5 & 0xF;
  }
  else
  {
    if ( (a5 & 0x1472) == 4162 )
    {
      v8 = (a5 & 1 | ((a5 & 0xC | ((a5 & 0x380 | ((a5 & 0x800 | ((unsigned int)a5 >> 1) & 0x7000) >> 1)) >> 3)) >> 1))
         + 640;
      goto LABEL_19;
    }
    v10 = (a5 & 0x60 | ((a5 & 0x300 | ((a5 & 0x800 | ((unsigned int)a5 >> 1) & 0x7000) >> 1)) >> 1)) >> 1;
    v11 = a5 & 0xC;
    v12 = a5 & 1;
  }
  v8 = v9 + (v12 | ((v11 | v10) >> 1));
LABEL_19:
  switch ( v8 )
  {
    case 0x50u:
интересно, они как-то классифицируют разбивку или просто так от фонаря цифр наставили?
Интересуюсь потому что непонятно как функции обзывать.
__________________
Konctantin вне форума   Ответить с цитированием
 

« 7.0.3 WDB cache handlers | Следующей темы нет »
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 09:39. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot