比如对 send 函数进行HOOK的,我是这样写的:(这个函数没有替换任何东西)int WINAPI mysend(SOCKET s, char *buf, int len, int flags)
{
int ret;
ret =send(s, (char *)buf, len, flags);
return ret;
}
如果替换 buf 这个参数,
只要客户端应用程序调用send的时候,不论发送什么数据,服务端收到的都是 "Hello World"int WINAPI mysend(SOCKET s, char *buf, int len, int flags)
{
char *buf1 = "Hello World";
int ret;
ret =send(s, (char *)buf1, len, flags);
return ret;
}
现在我要HOOK WSASend这个函数,内部参数总是填错
用 "?" 表示的参数,就是我不知道如何填写的
先不替换参数,请大家帮忙看看应该怎么填int WINAPI myWSASend(SOCKET s,
  LPWSABUF lpBuffers,
  DWORD dwBufferCount,
  LPDWORD lpNumberOfBytesSent,
  DWORD dwFlags,
  LPWSAOVERLAPPED lpOverlapped,
  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{
int ret;
ret =WSASend(s,
?, //直接填 lpBuffers 会编译出错,下面的类同
dwBufferCount,
?,
dwFlags,
?,
?,);
return ret;
}

解决方案 »

  1.   

    [我是楼主]
      如果函数内部所填的参数,和形参一样的话,
    ret =WSASend(s,
             lpBuffers,
    dwBufferCount,
    lpNumberOfBytesSent, 
    dwFlags,
             lpOverlapped,  
    lpCompletionRoutine);编译就会出现以下错误提示(mydll.dll是正在修改的工程)
    Mydll.obj : error LNK2019: 无法解析的外部符号 __imp__WSASend@28 ,该符号在函数 "int __stdcall myWSASend(unsigned int,struct _WSABUF *,unsigned long,unsigned long *,unsigned long,struct _OVERLAPPED *,void (__stdcall*)(unsigned long,unsigned long,struct _OVERLAPPED *,unsigned long))" (?myWSASend@@YGHIPAU_WSABUF@@KPAKKPAU_OVERLAPPED@@P6GXKK2K@Z@Z) 中被引用..\mydll.dll : fatal error LNK1120: 1 个无法解析的外部命令
      

  2.   

    这种错误提示不是sock的问题哦,好像是cpp文件没有被正常包含到项目中所引起的哦。