|
Копаем клиент Копаем клиент |
|
Опции темы | Поиск в этой теме | Опции просмотра |
22.08.2011, 19:12 | #1 |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
Откуда вызываются формировщики
Разбирал один пакет, Client->Server направленности, хотел пошариться по месту где вызывается функция формирующая пакет, и тут столкнулся с проблемой: поиск по декомпилированному листингу ничего не дал кроме объявления и заполнения этой функции. Получается, что она тоже вызывается по хеш таблице, или как это там правильно называется, а вот как найти эту таблицу никто не в курсе?
Клиент 4.0.6а. Последний раз редактировалось HuntsMan; 22.08.2011 в 19:19. |
22.08.2011, 22:08 | #2 |
Новичок
Регистрация: 04.03.2011
Сообщений: 29
Сказал(а) спасибо: 12
Поблагодарили 9 раз(а) в 7 сообщениях
|
CMSG отправляющие функции должны вызываться прямым образом. Попробуй использовать xref в иде вместо поиска по декомпилу. Точнее сказать не могу, не зная про какой пакет речь.
|
23.08.2011, 12:16 | #4 |
Новичок
Регистрация: 04.03.2011
Сообщений: 29
Сказал(а) спасибо: 12
Поблагодарили 9 раз(а) в 7 сообщениях
|
Не напрямую, но как я и говорил по xref находится.
Для билда 14333: CMSG_GUILD_ADD_RANK, номер 33888, хэндлер 6B96E0. По xref находится только Код:
.rdata:00B8F498 off_B8F498 dd offset sub_6B96E0 |
Пользователь сказал cпасибо: | HuntsMan (23.08.2011) |
23.08.2011, 16:23 | #5 |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
Спасибо, добрался я до нужного места
Теперь другой вопрос смотря на функцию int __thiscall sub_969F70(void *this, int a2) я как понял в первом аргументе идет адрес, дальше к примеру к этому адресу прибавляется 57 (CDataStore__PutInt8(a2, *((_BYTE *)v3 + 57)) ну и т.п. А теперь вопрос: от какого адреса нужно плясать? Я так понял нужно от адреса вызова функции sub_4ED020: Код:
if ( FrameScript__IsString(a1, 1) ) { if ( (unsigned int)dword_DFAF78 < 0xA ) { v3 = FrameScript__ToLString(a1, 1, 0); if ( v3 ) { if ( *(_BYTE *)v3 ) { sub_4ED020(v3, (unsigned int)&v6, 16, 64, 1); v4 = ClntObjMgrGetActivePlayerObj(); if ( v4 ) { sub_969F30((int)&v5, **((_DWORD **)v4 + 2), *(_DWORD *)(*((_DWORD *)v4 + 2) + 4), (int)&v6, dword_DFAF78); ClientConnection__SendSpecialPacket((int)&v5); sub_9699A0(&v5); } } } } result = 0; } |