|
Прочая документация Помощь, книги, инструкции, описания |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
25.06.2012, 13:08 | #1 |
MaNGOS Dev
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
|
Спасибо за быстрый ответ.
Для 14333 есть функция, Код:
protected override bool NormalCheck(uint opcode) { return (opcode & 0x2322) == 8738 && opcode != 57919 && opcode != 26159; } Код:
//----- (00485940) -------------------------------------------------------- char __thiscall NetClient__ProcessMessage(void *this, int a2, int a3, int a4) { int v4; // ebx@1 void *v5; // edi@1 unsigned int v6; // esi@1 char result; // al@2 unsigned int v8; // eax@3 int v9; // ecx@6 ++dword_D36C28; v4 = a3; v5 = this; CDataStore__GetInt16(a3, (int)&a3); v6 = (unsigned __int16)a3; if ( (a3 & 0x2399) == 0x301 ) { result = NetClient__JAMClientDispatch(v5, 0, a2, a3, v4); } else { (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v5 + 72))(v5, (unsigned __int16)a3); v8 = v6 & 1 | ((v6 & 0x1C | (((unsigned __int8)(v6 & 0xC0) | ((v6 & 0x1C00 | (v6 >> 1) & 0x6000) >> 2)) >> 1)) >> 1); if ( (v6 & 0x2322) == 0x2222 && v6 != 0xE23F && v6 != 0x662F && (v9 = *((_DWORD *)v5 + v8 + 344)) != 0 ) result = ((int (__cdecl *)(_DWORD, unsigned int, int, int))(v9 - ((v6 | (v6 << 16)) ^ 0x62A3A31D)))( *((_DWORD *)v5 + v8 + 2392), v6, a2, v4); else result = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 24))(v4); } return result; } Правильно ли, что в *((_DWORD *)v5 + v8 + 2392) будет как раз адрес обработчика? |
26.06.2012, 10:38 | #2 | |
Новичок
Регистрация: 04.03.2011
Сообщений: 29
Сказал(а) спасибо: 12
Поблагодарили 9 раз(а) в 7 сообщениях
|
Цитата:
Мне интересно, Amaru, что вы хотите разработать на основе этой информации? Проблема маппинга опкодов к хэндлерам уже решена полностью. Проблема маппинга опкодов между версиями решена удовлетворительно, хотя всегда есть место для улучшения. Основная проблема для поддержки новых и будущих версию, как я вижу - это создание автоматизированного парсера структуры Jam bitstream пакетов. Чтобы в ядре порядок данных в структуре пакетов мог оставаться стабильным между версиями, а порядок сериализации этих данных для конкретной версии основывался бы на информации сгенерированной этим чудесным парсером. Имея такую штуку можно было бы думать о переходе между новыми версиями за разумное время, без траты уймы времени на ручную перестановку порядка филдов в куче JAM пакетов. |
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разбор кода Спелов | partizanes | Прочая документация | 7 | 24.01.2012 15:29 |
шифрование пакетов в 3.3.2 | 84ivan | Копаем клиент | 8 | 05.10.2010 19:10 |
Шифрование пакетов в 11685 | Konctantin | Корзина | 2 | 27.03.2010 12:34 |