我试图勾自定义的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()函数的地址。由于功能缺乏一个返回类型的类型定义是错误的。因此它不Visual Studio 2003中下编译。

您可以使用具有更多的运气:

int (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = &recv;
它声明只类型的变量“函数指针”,其存储recv()的地址

现在所述第二片段是具有相同的签名作为recv()function,打印的消息的功能,然后通过调用上述所声明的函数指针原始recv()

下面的代码只显示了如何通过指针调用一个函数:它不会在目前的过程中更换任何东西。

另外,我不知道你可以与另一个进程干扰,并在你的意志代替一个功能。这将是该系统的安全构成极大的威胁。但你为什么要这么做,在第一个地方??

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top