我已经为游戏过程挂钩了send和recv函数。现在我可以处理发送的内容和收到的内容。
我的职能是:
int __stdcall nSend(SOCKET s, char *buf, int len,int flags)
{
UnHookFunction("ws2_32.dll", "send", KSendHook);
int result = send(s, buf, len, flags); // Send data
HookFunction("ws2_32.dll", "send", (LPVOID*) nSend, KSendHook);
return result;
}
int __stdcall nRecv(SOCKET s, char *buf, int len, int flags)
{
UnHookFunction("ws2_32.dll", "recv", KRecvHook);
int result = recv(s, buf, len, flags); // Receive data
HookFunction("ws2_32.dll", "recv", (LPVOID*) nRecv, KRecvHook);
return result;
}
我的问题是:
我挂了这个函数,所以我只能解释和修改发送和接收的内容。 如果我是游戏,我需要发送新的数据包结构。使用相同的套接字。
如何模拟钩子函数的同一套接字的send和recv?
答案 0 :(得分:0)
调用钩子接收函数时,根据需要调用实际的发送和接收函数。当您有数据要返回给调用者时,将其返回给调用者。当调用send时,取出发送的数据,决定是否要向服务器发送任何内容,并根据需要调用send和receive与服务器通信。