|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
Копаем клиент Копаем клиент |
|
Опции темы | Поиск в этой теме | Опции просмотра |
12.12.2010, 17:10 | #1 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
[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. |
12.12.2010, 17:39 | #2 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Ну вид не читабельный потому что SSE инструкции в hexrays 1.1 не поддерживаются, а утечек более свежей версии не было.
Код:
2010/02/01 Hex-Rays v1.2 + SSE scalar floating point support Последний раз редактировалось TOM_RUS; 12.12.2010 в 17:43. |
Пользователь сказал cпасибо: | Konctantin (12.12.2010) |
12.12.2010, 22:13 | #3 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
А что в SIMD непонятного?
|
12.12.2010, 22:58 | #4 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
меня смущает то, что я не знаю, что возвращает эта функция
Код:
sub_408BC0(v17) Код:
__asm { movss xmm0, dword ptr [eax+8] mulss xmm0, ds:dword_AB2C64 movss [esp+18h+var_18], xmm0 } |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |