Ru-MaNGOS

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

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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.12.2010, 17:10   #1
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию [13329] Quaternion [Packed] <-> [Unpacked]

Вот разбирался с ротацией ГО и дошел до упаковки данных этой структуры обратно в тип ulong, но в клиенте нашел только одну функцию, которая могла бы это сделать:
Код:
//----- (0041F2A0) --------------------------------------------------------
// PackedQuaternion
void *__thiscall sub_41F2A0(void *this, Quaternion *a2)
{
  int _EDI; // edi@1
  unsigned __int8 _CF; // cf@1
  unsigned __int8 _ZF; // zf@1
  signed int v8; // esi@2
  void *result; // eax@4
  float v12; // ST00_4@4
  int v13; // eax@4
  int v16; // ebx@4
  float v17; // ST00_4@4
  int v18; // ST14_4@4
  signed __int64 _QAX; // qax@4
  int v20; // ebx@4
  __int64 _QT0; // qt0@4
  int v22; // edi@4
  float v23; // ST00_4@4
  int v24; // eax@4
  __int64 v25; // qax@4
  int v26; // ebx@4
  void *v27; // [sp+10h] [bp-8h]@1

  __asm { xorps   xmm0, xmm0 }
  _EDI = (int)a2;
  __asm { comiss  xmm0, dword ptr [edi+0Ch] }
  v27 = this;
  if ( _CF | _ZF )
    v8 = 1;
  else
    v8 = -1;
  __asm
  {
    movss   xmm0, dword ptr [edi+4]
    mulss   xmm0, ds:dword_AB2C64
    movss   [esp+18h+var_18], xmm0
  }
  v13 = v8 * sub_408BC0(v12);
  __asm
  {
    movss   xmm0, dword ptr [edi]
    mulss   xmm0, ds:dword_AB2C60
  }
  v13 &= 0x1FFFFFu;
  v16 = v13;
  __asm { movss   [esp+18h+var_18], xmm0 }
  v18 = (unsigned __int64)v13 >> 32;
  _QAX = (signed __int64)(v8 * sub_408BC0(v17)) << 21;
  v20 = _QAX | v16;
  HIDWORD(_QT0) = HIDWORD(_QAX) | v18;
  LODWORD(_QT0) = v20;
  v22 = (unsigned __int64)(_QT0 << 21) >> 32;
  LODWORD(_QAX) = a2;
  __asm
  {
    movss   xmm0, dword ptr [eax+8]
    mulss   xmm0, ds:dword_AB2C64
    movss   [esp+18h+var_18], xmm0
  }
  v24 = v8 * sub_408BC0(v23);
  v25 = v24 & 0x1FFFFF;
  v26 = v25 | (v20 << 21);
  result = v27;
  *((_DWORD *)v27 + 1) = HIDWORD(v25) | v22;
  *(_DWORD *)v27 = v26;
  return result;
}
Но не получается привести ее в читабельный вид, Не подскажите, как это сделать.

ЗЫ. если кому-то интересно - то вот сама структура:
http://paste2.org/p/1138036
__________________

Последний раз редактировалось Konctantin; 12.12.2010 в 17:24.
Konctantin вне форума   Ответить с цитированием
Старый 12.12.2010, 17:39   #2
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Ну вид не читабельный потому что SSE инструкции в hexrays 1.1 не поддерживаются, а утечек более свежей версии не было.
Код:
2010/02/01 Hex-Rays v1.2
+ SSE scalar floating point support
http://www.hex-rays.com/news1.shtml#101001

Последний раз редактировалось TOM_RUS; 12.12.2010 в 17:43.
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (12.12.2010)
Старый 12.12.2010, 22:13   #3
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

А что в SIMD непонятного?
zergtmn вне форума   Ответить с цитированием
Старый 12.12.2010, 22:58   #4
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

меня смущает то, что я не знаю, что возвращает эта функция
Код:
sub_408BC0(v17)
и то, что делается тут
Код:
  __asm
  {
    movss   xmm0, dword ptr [eax+8]
    mulss   xmm0, ds:dword_AB2C64
    movss   [esp+18h+var_18], xmm0
  }
я понимаю, что тут идет упаковка данных, но воспроизвести не получается, по этому и написал на форуме...
__________________
Konctantin вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IDB WoW 5.2.0 Build 16650 TOM_RUS Копаем клиент 74 26.03.2016 03:04
[13329] SMSG_UPDATE_OBJECT Konctantin Копаем клиент 7 19.07.2011 20:17
PACKED данные Йоха Опкоды 11 10.05.2011 20:16
[9606] Send packed caster GUID for AFLAG_NOT_CASTER. newsbot CMaNGOS Commits 0 19.03.2010 17:40


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


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