dll工程文件中
HookAPI('ws2_32.dll','WSASend',@WSASendHook,@WSASendOrigin);hook文件中
function WSASendHook(s:TSocket;lpBuffers:LPWSABUF;
dwBufferCount:dword;lpNumberOfBytesSent:LPDWORD;
dwFlags:DWORD;lpOverlapped:LPWSAOVERLAPPED;
lpCompletionROUTINE:LPWSAOVERLAPPED_COMPLETION_ROUTINE):integer;stdcall;
var
myBuf:PChar;
myLen:Integer;
begin
PopUnit.FrmPop.ListBox1.Items.Add('拦截到发送的封包');
strcopy(myBuf,lpBuffers.buf);
PopUnit.FrmPop.ListBox1.Items.Add(myBuf);
WSASendHook:=WSASendOrigin(s,lpBuffers,dwBufferCount,
lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionROUTINE);
end;
这样为什么不行,出错在哪里了?
HookAPI('ws2_32.dll','WSASend',@WSASendHook,@WSASendOrigin);hook文件中
function WSASendHook(s:TSocket;lpBuffers:LPWSABUF;
dwBufferCount:dword;lpNumberOfBytesSent:LPDWORD;
dwFlags:DWORD;lpOverlapped:LPWSAOVERLAPPED;
lpCompletionROUTINE:LPWSAOVERLAPPED_COMPLETION_ROUTINE):integer;stdcall;
var
myBuf:PChar;
myLen:Integer;
begin
PopUnit.FrmPop.ListBox1.Items.Add('拦截到发送的封包');
strcopy(myBuf,lpBuffers.buf);
PopUnit.FrmPop.ListBox1.Items.Add(myBuf);
WSASendHook:=WSASendOrigin(s,lpBuffers,dwBufferCount,
lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionROUTINE);
end;
这样为什么不行,出错在哪里了?
const
MAX_BUFFER_SIZE=2048;function WSASendHook(s:TSocket;lpBuffers:LPWSABUF;
dwBufferCount:dword;lpNumberOfBytesSent:LPDWORD;
dwFlags:DWORD;lpOverlapped:LPWSAOVERLAPPED;
lpCompletionROUTINE:LPWSAOVERLAPPED_COMPLETION_ROUTINE):integer;stdcall;
var
myBuf:array[0..MAX_BUFFER_SIZE-1];
myLen:Integer;
begin
PopUnit.FrmPop.ListBox1.Items.Add('拦截到发送的封包');
if lpNumberOfBytesSent>MAX_BUFFER_SIZE then
myLen:=MAX_BUFFER_SIZE
else
myLen:=lpNumberOfBytesSent;
copymemory(@myBuf[0], lpBuffers.buf, myLen);
PopUnit.FrmPop.ListBox1.Items.Add(myBuf);
WSASendHook:=WSASendOrigin(s,lpBuffers,dwBufferCount,
lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionROUTINE);
end;ps: delphi程序员应该重点看看指针的本质和应用