Pergunta

Eu estava tentando ligar um método winsock2.0 recv () personalizada para um processo remoto, de modo que meus executa a função em vez de a um no processo, eu tenho sido pesquisando isso e eu encontrei alguns realmente bom exemplo, mas eles falta description

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

Agora, a minha pergunta é: o que isso significa, ou não, isso é algum tipo de um ponteiro para a função recv real ()?

E, em seguida, o outro pedaço de código para a função 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?
}

Desculpe se estas perguntas soar muito básico, eu só comecei a aprender 2 ou 3 semanas. Obrigado.

Foi útil?

Solução

Onde você encontrou um exemplo?

a primeira linha tenta definir um novo tipo WSAREC, que é um ponteiro para uma função com a mesma assinatura como recv(). Infelizmente, ele também está tentando declarar uma variável deste tipo para armazenar o endereço da função recv(). o typedef é errado já que a função está faltando um tipo de retorno. por isso não compila em Visual Studio 2003.

Você pode ter mais sorte usando:

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

que declara apenas uma variável do tipo "ponteiro para função", que armazena o endereço do recv().

Agora, o segundo trecho é uma função que tem a mesma assinatura que o recv()function, que imprime uma mensagem, em seguida, chama o recv() original através do ponteiro função declarada acima.

o código aqui apenas mostra como chamar uma função através de um ponteiro: Ele não substitui nada no processo atual.

Além disso, eu não estou certo que você pode interferir com outro processo e substituir uma função em sua vontade. seria uma grande ameaça para a segurança do sistema. mas por que você faria isso em primeiro lugar ??

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top