2010-02-10 2 views
0

Я пытался подключить собственный метод recv() winsock2.0 к удаленному процессу, чтобы моя функция выполнялась вместо того, что было в процессе, я искал это и я нашел очень хороший пример, но у них нет описанияWinsock2 recv() hook в удаленный процесс

typedef (WINAPI * WSAREC)(SOCKET s, char *buf, int len, int flags) = recv; 

Теперь мой вопрос, что это значит, или же, это своего рода указатель на реальный RECV функции()?

И тогда другой кусок кода для пользовательской функции

int WINAPI Cus_Recv(SOCKET s, char *buf, int len, int flags) 
{ 
    printf("Intercepted a packet"); 

    return WSAREC(s, buf, len, flags); // <- What is this? 
} 

К сожалению, если эти вопросы звучат действительно основные, я только начал обучение 2 или 3 недели назад. Спасибо.

ответ

1

Где вы нашли такой пример?

первая строка пытается определить новый тип WSAREC, который является указателем на функцию, имеющую ту же подпись, что и recv(). к сожалению, он также пытается объявить переменную этого типа для хранения адреса функции recv(). typedef ошибочен, так как функция не имеет типа возврата. поэтому он не компилируется в Visual Studio 2003.

вы можете иметь больше удачи с помощью:

int (WINAPI * WSAREC)(SOCKET s, char *buf, int len, int flags) = &recv; 

который декларирует только переменную типа «указатель на функцию», которая хранит адрес recv().

теперь второй фрагмент представляет собой функцию, которая имеет ту же подпись, что и функция recv(), которая печатает сообщение, а затем вызывает исходный recv() с помощью указателя функции, указанного выше.

код здесь показывает только, как вызвать функцию через указатель: она не заменяет ничего в текущем процессе.

также, я не уверен, что вы можете вмешаться в другой процесс и заменить одну функцию по своему желанию. это будет большой угрозой безопасности системы. но зачем вам это делать в первую очередь?

+0

Я пытаюсь получить некоторые пакеты из онлайн-игры, для создания игрового экрана .. однако этот код компилируется и отлично работает, заменяя функцию, не было нарушения безопасности, я использовал API-соединение для обхода (отсутствующий код) функция в исходном процессе, которая принимает пакеты. Мой вопрос был исключительно о концепции, и как она работает, спасибо за ваш ответ в любом случае. – SimpleButPerfect

Смежные вопросы