Winsock2 recv () подключается к удаленному процессу - PullRequest
0 голосов
/ 10 февраля 2010

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

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 Ответ

1 голос
/ 10 февраля 2010

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

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

вам может повезти больше, используя:

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

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

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

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

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

...