Winsock2 recv () crochet dans un processus distant
-
19-09-2019 - |
Question
Je suis en train de brancher une méthode winsock2.0 recv personnalisé () à un processus à distance, de sorte que ma fonction exécute au lieu de celui dans le processus, j'ai été googler cela et je l'ai trouvé quelques très bon exemple, mais ils Description absence
typedef (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = recv;
Maintenant, ma question est, qu'est-ce que cela signifie, ou fait, est-ce une sorte d'un pointeur vers la fonction réelle recv ()?
Et puis l'autre morceau de code pour la fonction personnalisée
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?
}
Désolé si ces questions sonnent vraiment de base, je ne ai commencé à apprendre il y a 2 ou 3 semaines. Merci.
La solution
où avez-vous trouvé un tel exemple?
la première ligne tente de définir une nouvelle WSAREC de type, qui est un pointeur vers une fonction ayant la même signature que recv()
. malheureusement, il essaie aussi de déclarer une variable de ce type pour stocker l'adresse de la fonction recv()
. le typedef est erroné puisque la fonction manque d'un type de retour. il ne compile pas sous Visual Studio 2003.
vous pouvez avoir plus de chance en utilisant:
int (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = &recv;
qui déclare qu'une variable de type « pointeur de fonction », qui stocke l'adresse du recv()
.
maintenant le deuxième extrait est une fonction qui a la même signature que le recv()
function, qui imprime un message, puis appelle la recv()
d'origine via le pointeur de fonction déclarée ci-dessus.
le code ici ne montre comment appeler une fonction par un pointeur: il ne remplace rien dans le processus en cours.
aussi, je ne suis pas sûr que vous pouvez interférer avec un autre processus et de remplacer une fonction à votre volonté. ce serait une grande menace pour la sécurité du système. mais pourquoi voulez-vous faire en premier lieu ??