我使用了DELPHI的APIHOOK拦截WSARecv的数据,发现有3个问题:
1、拦截的数据后面经常有很多‘瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?’,求教下这个是怎么回事。
2、实际的拦截的缓冲区的数据都是偏大,最后都是瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?这类的代码,怎么得到实际的数据而不要多余的乱码。
3、另外捕捉一会就会告出错。
小弟是新学DELPHI,希望知道答案的高手指点一下。function MyWSARecv( s: TSocket; lpBuffers: PWSABUF; dwBufferCount: DWORD;
lpNumberOfBytesRecvd: PDWORD; lpFlags: PDWORD;lpOverlapped: LPWSAOVERLAPPED;
lpCompletionRoutine: PWSAOVERLAPPED_COMPLETION_ROUTINE): integer; stdcall;
var
TmpChr: array[0..8192] of Char;
begin
CopyMemory(@TmpChr, lpBuffers.buf,lpNumberOfBytesRecvd^);
memo1.lines.appendTmpChr);
result := oldWSARecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd,lpFlags,lpOverlapped,lpCompletionRoutine);
end;
1、拦截的数据后面经常有很多‘瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?’,求教下这个是怎么回事。
2、实际的拦截的缓冲区的数据都是偏大,最后都是瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?瓠?这类的代码,怎么得到实际的数据而不要多余的乱码。
3、另外捕捉一会就会告出错。
小弟是新学DELPHI,希望知道答案的高手指点一下。function MyWSARecv( s: TSocket; lpBuffers: PWSABUF; dwBufferCount: DWORD;
lpNumberOfBytesRecvd: PDWORD; lpFlags: PDWORD;lpOverlapped: LPWSAOVERLAPPED;
lpCompletionRoutine: PWSAOVERLAPPED_COMPLETION_ROUTINE): integer; stdcall;
var
TmpChr: array[0..8192] of Char;
begin
CopyMemory(@TmpChr, lpBuffers.buf,lpNumberOfBytesRecvd^);
memo1.lines.appendTmpChr);
result := oldWSARecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd,lpFlags,lpOverlapped,lpCompletionRoutine);
end;
begin
result := oldWSARecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd,lpFlags,lpOverlapped,lpCompletionRoutine);
//这样试试看
CopyMemory(@TmpChr, lpBuffers.buf,lpNumberOfBytesRecvd^);
memo1.lines.appendTmpChr);
end;