Ru-MaNGOS

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

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

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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.08.2013, 22:13   #4
Astromancer
Новичок
 
Регистрация: 28.05.2012
Сообщений: 10
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Astromancer На верном пути
По умолчанию

Цитата:
Сообщение от Konctantin Посмотреть сообщение
Сори, на работе сидел и колупал без IDA, исходя из текста
для полноты картины, вот функция чтения pagetextcache
Код:
int __thiscall sub_7ACBD0(void *this, int a2, int a3)
{
  void *v3; // esi@1
  int v4; // eax@1
  int v5; // ST04_4@1
  int v6; // eax@1
  int v7; // ebx@1
  int result; // eax@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = this;
  v9 = 0;
  CDataStore::GetInt32(&v9);
  *(_DWORD *)v3 = v9;
  a2 = 0;
  CDataStore::GetInt32(&a2);
  v4 = a2;
  LOBYTE(a2) = 0;
  v5 = a2;
  *((_DWORD *)v3 + 1) = v4;
  LOWORD(v9) = 2048;
  v6 = sub_744280(v5);
  v7 = v6;
  *((_DWORD *)v3 + 2) = v6;
  result = sub_410310((char *)v3 + 8, v6);
  *((_BYTE *)v3 + v7 + 8) = 0;
  return result;
}
а уже из нее вызывается функция получения длины строки:
Код:
int __thiscall sub_744280(int this, int a2)
{
  int v2; // edi@1
  char v3; // cl@1
  unsigned int v4; // eax@2
  unsigned int v5; // esi@3
  int v7; // [sp+Ah] [bp-6h]@0
  unsigned __int8 v8; // [sp+Eh] [bp-2h]@3
  unsigned __int8 v9; // [sp+Fh] [bp-1h]@2

  v2 = this;
  v3 = *(_BYTE *)(this + 5);
  if ( v3 == 8 )
  {
    v9 = 0;
    CDataStore::GetInt8(&v9);
    v4 = v9;
  }
  else
  {
    v5 = (unsigned int)*(_BYTE *)(v2 + 4) >> v3;
    v8 = 0;
    CDataStore::GetInt8(&v8);
    v4 = (v5 << *(_BYTE *)(v2 + 5)) | ((unsigned int)v8 >> (8 - *(_BYTE *)(v2 + 5)));
    *(_BYTE *)(v2 + 4) = v8 << *(_BYTE *)(v2 + 5);
  }
  LOBYTE(v7) = 0;
  return 16 * v4 | sub_725A90(v7);
}
а та в свою очередь содержит еще часть
Код:
unsigned int __thiscall sub_725A90(int this, int a2)
{
  int v2; // esi@1
  unsigned __int8 v3; // cl@1
  unsigned __int8 v4; // dl@2
  unsigned int result; // eax@2
  unsigned int v6; // edi@5
  unsigned __int8 v7; // bl@5
  char v8; // dl@5
  unsigned int v9; // eax@5
  char v10; // cl@5
  unsigned __int8 v11; // [sp+7h] [bp-1h]@3

  v2 = this;
  v3 = *(_BYTE *)(this + 5);
  if ( v3 > 4u )
  {
    v11 = 0;
    if ( v3 == 8 )
    {
      CDataStore::GetInt8(&v11);
      result = (unsigned int)v11 >> 4;
      *(_BYTE *)(v2 + 4) = 16 * v11;
      *(_BYTE *)(v2 + 5) = 4;
    }
    else
    {
      v6 = (unsigned int)*(_BYTE *)(v2 + 4) >> v3;
      CDataStore::GetInt8(&v11);
      v7 = v11;
      v8 = *(_BYTE *)(v2 + 5) - 4;
      v9 = (unsigned int)v11 >> (8 - v8);
      v10 = *(_BYTE *)(v2 + 5) - 4;
      *(_BYTE *)(v2 + 5) = v8;
      result = (v6 << v10) | v9;
      *(_BYTE *)(v2 + 4) = v7 << v10;
    }
  }
  else
  {
    v4 = *(_BYTE *)(v2 + 4);
    result = (unsigned int)v4 >> 4;
    *(_BYTE *)(v2 + 4) = 16 * v4;
    *(_BYTE *)(v2 + 5) = v3 + 4;
  }
  return result;
}
Вот мне, как человеку далекому от всего этого(ассемблер то знаю, но вот с реверсингом никогда не приходилось иметь дело) интересно, как вы определяете через эти сабы, где какая функция. Интуитивно чтоль?
Astromancer вне форума   Ответить с цитированием
 


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IDB WoW 5.2.0 Build 16650 TOM_RUS Копаем клиент 74 26.03.2016 03:04
[12344] More correct help string for .wp show command. newsbot CMaNGOS Commits 0 22.01.2013 19:00
[10773] Fixed crash at empty build list in realm string. newsbot CMaNGOS Commits 0 22.11.2010 01:30
[10429] some format string fixes newsbot CMaNGOS Commits 0 31.08.2010 13:52
[9778] Old gcc hash_map not have support for std::string keys. newsbot CMaNGOS Commits 0 22.04.2010 23:30


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


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