c++ - Winsock2 recv() 挂接到远程进程

标签 c++ visual-c++ hook recv winsock2

我试图将自定义 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/

相关文章:

c++ - 函数指针类型不能用于函数原型(prototype)

使用 stringstream 的 C++ String 到 double 转换给出精度错误

c++ - 在没有它们的笔记本电脑上创建 Alt 代码

c++ - 连接到一个相当大的应用程序

testing - 在每个浏览器的钩子(Hook)之前运行

c++ - 为什么是 0022FF08 + sizeof(int) = 0022FF0C 而不是 0022FF0A?

c++ - 使用带 std::thread 的 SFML 的编译器错误

c++ - 将值从本地堆栈移动到堆? (C++)

c++ - 读取 2 个 radio 、串行通信之间发送的信号

c++ - 如何使用 MSVC2015 将带有局部变量的一些参数的函数包装器放置到容器中?