Winsock2 Recv() подключается к удаленному процессу
-
19-09-2019 - |
Вопрос
Я пытался подключить собственный метод 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 недели назад.Спасибо.
Решение
где вы нашли такой пример?
первая строка пытается определить новый тип WSAREC, который является указателем на функцию, имеющую ту же сигнатуру, что и recv()
.к сожалению, он также пытается объявить переменную этого типа для хранения адреса recv()
функция.typedef неверен, поскольку у функции отсутствует тип возвращаемого значения.поэтому он не компилируется под Visual Studio 2003.
вам может повезти больше, используя:
int (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = &recv;
который объявляет только переменную типа «указатель на функцию», хранящую адрес recv()
.
теперь второй фрагмент представляет собой функцию, имеющую ту же сигнатуру, что и recv()
функция, которая печатает сообщение, а затем вызывает исходное recv()
через указатель функции, объявленный выше.
код здесь показывает только, как вызвать функцию через указатель:он ничего не заменяет в текущем процессе.
Кроме того, я не уверен, что вы можете вмешаться в другой процесс и заменить одну функцию по своему желанию.это было бы большой угрозой безопасности системы.но зачем вообще это делать??