Вопрос

Я пытался подключить собственный метод 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() через указатель функции, объявленный выше.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top