C++ C++;Winsock recv钩子绕道
我想写一个.dll。我的Targetapplication是一款游戏,使用winsock。.dll应该在控制台中写入游戏(Targetapplication)通过winsock中的recv函数接收到的所有内容。我在VisualStudio 2012中创建了一个C++ Win32控制台应用程序,专业的、选择的.DLL和空的项目。 main.cpp中的我的代码C++ C++;Winsock recv钩子绕道,c++,dll,hook,winsock2,detours,C++,Dll,Hook,Winsock2,Detours,我想写一个.dll。我的Targetapplication是一款游戏,使用winsock。.dll应该在控制台中写入游戏(Targetapplication)通过winsock中的recv函数接收到的所有内容。我在VisualStudio 2012中创建了一个C++ Win32控制台应用程序,专业的、选择的.DLL和空的项目。 main.cpp中的我的代码 #include <Windows.h> #include <detours.h> #include <win
#include <Windows.h>
#include <detours.h>
#include <winsock2.h>
#include <iostream>
using namespace std;
#pragma comment (lib, "detours")
typedef int (WINAPI *MyRecv) (SOCKET, char, int, int);
MyRecv OrigRecv = NULL;
int WINAPI RecvDetour(SOCKET s, char *buf, int len, int flags)
{
cout << *buf << " - " << len << endl;
return OrigRecv(s, *buf, len, flags);
}
BOOL APIENTRY DllMain(HINSTANCE module, DWORD Reason, LPVOID reserved)
{
switch (Reason)
{
case DLL_PROCESS_ATTACH:
cout << "Starting.." << endl;
OrigRecv = (MyRecv)DetourFunction((PBYTE)recv, (PBYTE)RecvDetour);
break;
case DLL_PROCESS_DETACH:
break;
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
#pragma注释(lib,“迂回”)
typedef int(WINAPI*MyRecv)(SOCKET、char、int、int);
MyRecv OrigRecv=NULL;
int WINAPI RecvDetour(套接字s、字符*buf、int len、int标志)
{
coutMyRecv
声明错误。第二个参数需要是char*
而不是char
此外,在填充接收缓冲区之前,您的迂回将输出该缓冲区。您需要先调用原始的recv()
函数,然后才能输出它接收到的内容。此外,请确保数据不会以null结尾
typedef int (WINAPI *MyRecv) (SOCKET, char*, int, int);
MyRecv OrigRecv = NULL;
int WINAPI RecvDetour(SOCKET s, char *buf, int len, int flags)
{
int ret = OrigRecv(s, buf, len, flags);
if (ret > 0)
cout.write(buf, ret) << " - " << ret << endl;
}
typedefint(WINAPI*MyRecv)(SOCKET,char*,int,int);
MyRecv OrigRecv=NULL;
int WINAPI RecvDetour(套接字s、字符*buf、int len、int标志)
{
int ret=原始曲线(s、buf、len、标志);
如果(ret>0)
cout.write(buf,ret)请在您的问题中逐字逐句地发布错误消息。它是德语,但可能有助于复制