代码如下:{---------------------------------------}
{函数功能:WSARecv函数的HOOK
{函数参数:同Recv
{函数返回值:integer
{---------------------------------------}
function MyWSARecv( s : TSocket; lpBuffers : PWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD;
  lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : PWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
var
  dwSize: cardinal;
  Datalong:Integer;begin
  //这儿进行接收的数据处理 
  WriteProcessMemory(ProcessHandle, AddWSARecv, @OldWSARecvProc[0], 8, dwSize);
  Datalong:=OldWSARecv( s,lpBuffers,dwBufferCount,lpNumberOfBytesRecvd,lpFlags,lpOverlapped,lpCompletionRoutine);
  recvout(lpBuffers,'接收 WSARecv',10); //这个地方,数据的长度我不知道怎么获取;
  Result :=Datalong; 
  JmpWSARecvCode.Address := @MyWSARecv;
  WriteProcessMemory(ProcessHandle, AddWSARecv, @JmpWSARecvCode, 8, dwSize);
end;
{---------------------------------------}
{函数功能:Send函数的HOOK
{函数参数:同Send
{函数返回值:integer
{---------------------------------------}
function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
begin
 
  recvout(Buf,'发送 Send',len); //还有这个地方的len
 WriteProcessMemory(ProcessHandle, AddSend, @OldSendProc[0], 8, dwSize);
Result :=OldSend(S, Buf, len, flags);
JmpsendCode.Address := @MySend;
WriteProcessMemory(ProcessHandle, AddSend, @JmpsendCode, 8, dwSize);
end;这是我写的收数据方法和发数据方法,现在就是获取不到数据的长度,请大家看一下。