Pregunta

Estaba intentando conectar un método personalizado recv() winsock2.0 a un proceso remoto, para que mi función se ejecute en lugar de la del proceso. He estado buscando en Google y encontré un ejemplo realmente bueno, pero les falta descripción.

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

Ahora mi pregunta es, ¿qué significa esto, o es una especie de puntero a la función recv() real?

Y luego el otro fragmento de código para la función personalizada.

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?
}

Lo siento si estas preguntas suenan muy básicas, comencé a aprender hace solo 2 o 3 semanas.Gracias.

¿Fue útil?

Solución

¿dónde encontrar un ejemplo?

la primera línea trata de definir un nuevo WSAREC tipo, que es un puntero a una función que tiene la misma firma que recv(). Por desgracia, también está tratando de declarar una variable de este tipo para almacenar la dirección de la función recv(). el typedef es incorrecto ya que la función se carece de un tipo de retorno. por lo que no se compila en Visual Studio 2003.

es posible que tenga más suerte usando:

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

que declara solamente una variable de tipo "puntero a funcionar", que almacena la dirección de la recv().

Ahora el segundo fragmento es una función que tiene la misma firma que el recv()function, que imprime un mensaje, a continuación, llama a la recv() original a través del puntero de función declarada anteriormente.

el código aquí sólo muestra cómo llamar a una función a través de un puntero: que no reemplaza nada en el proceso actual.

Además, no estoy seguro de que puede interferir con otro proceso y sustituir una función a su voluntad. sería una gran amenaza para la seguridad del sistema. pero ¿por qué haces eso, en primer lugar ??

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top