Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 03.03.2013, 08:41   #1
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

Elecktron, так проблема же не найти сенд, а правильно вызвать.
Вот здесь
Код:
void _cdecl SendPacket_Hook(void* obj, char* format, ...)
{
	if(lpSendPacketObject == 0)
		lpSendPacketObject = obj;

	va_list args;
	va_start(args, format);
	printf("Format: %s\n", format);
	SendPacket_Detour->Remove(); //Снял хук
	SendPacket(obj, format, args);   //<-- волнующий меня момент
	SendPacket_Detour->Apply();    //Поставил хук
}
Собственно, а что же конкретно находится в args? На попытку вызвать оригинальную функцию сервер отвечает мне дисконектом, значит я ему передаю какую-то фигню.

А какие плагины? У меня оля с сод/фантом в лучшем случае просто зависает, в худшем краш

Добавлено через 5 часов 42 минуты
Экспериментальным путем выяснил, что все параметры в порядке, тогда почему функция отказывается работать.

Зашел на сервер, выбрал чара, после этого активировал хук, начал клацать скилы и пытаться ходить. В логе видно, что хук срабатывает, в args лежит указатель на правильный пакет, но никаких действий не происходит

Последний раз редактировалось Sinn3r, 03.03.2013 в 08:41. Причина: Добавлено сообщение
Sinn3r вне форума   Ответить с цитированием
Старый 03.03.2013, 12:57   #2
Рыцарь
 
Аватар для Morfik
 
Регистрация: 13.10.2009
Сообщений: 665
Сказал Спасибо: 38
Имеет 172 спасибок в 108 сообщенях
Morfik пока неопределено
По умолчанию

Sinn3r, а где запихивание в ecx указателя на объект unetworkhandle перед вызовом сенда? (правд могу и ошибаться что sendpacket это метод класса unetworkhandle, не баловался с ним)
__________________
каждый раз, когда ты пишешь int i вместо short i, сотни пользователей вынуждены докупать планку памяти

служба поддержки 4gay - ICQ 642274822
Morfik вне форума   Ответить с цитированием
Старый 03.03.2013, 14:47   #3
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

Morfik, вроде-бы не надо, объект идет первым параметром.
Кстати, если поставить хук в vtable, а вызывать оригинал джампом непосредственно из того места куда указывала таблица, то все вроде работает, но сцуко, это кошмарная реализация
Sinn3r вне форума   Ответить с цитированием
Старый 03.03.2013, 15:06   #4
Рыцарь
 
Аватар для Morfik
 
Регистрация: 13.10.2009
Сообщений: 665
Сказал Спасибо: 38
Имеет 172 спасибок в 108 сообщенях
Morfik пока неопределено
По умолчанию

Sinn3r, это у тебя да?
Код:
__declspec( naked ) void _cdecl jmpSendPacket(void* obj, char* format,...)
{
	_asm jmp lpSendPacket_Original
}
Цитата:
cdecl
Основной способ вызова для Си (отсюда название, сокращение от «c-declaration»). Аргументы передаются через стек, справа налево. Очистку стека производит вызывающая программа. Это основной способ вызова функций с переменным числом аргументов (например, printf(…))
то есть твой объект идет параметром - передается в стек, а должен быть передан в регистр ecx

могу и ошибаться, но поменять 2 строки с ручным запихиваетм объекта в ecx не долго
__________________
каждый раз, когда ты пишешь int i вместо short i, сотни пользователей вынуждены докупать планку памяти

служба поддержки 4gay - ICQ 642274822
Morfik вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



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

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


Часовой пояс GMT +4, время: 12:07.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!