我试图将自定义 recv() winsock2.0 方法 Hook 到远程进程,以便我的函数执行而不是进程中的函数,我一直在谷歌搜索这个,我发现了一些非常好的例子,但是他们缺乏描述
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()
函数具有相同签名的函数,它打印一条消息,然后通过上面声明的函数指针。
这里的代码只是展示了如何通过指针调用一个函数:它并没有替换当前进程中的任何东西。
另外,我不确定您是否可以干扰另一个进程并随意替换一个功能。这将对系统的安全构成巨大威胁。但你一开始为什么要这么做??
关于c++ - Winsock2 recv() 挂接到远程进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2235826/