通过hook send截封包
function send(s: TSocket;Buf: Pchar; len, flags: Integer): Integer; stdcall;
要把buf转换hex数据 
    for   i   :=   1   to   length(buf)   do
    begin
      str:=str   +   inttohex(ord(buf[i]),2);
    end;
我发现ip port size 与封包助手一致,hex数据不正确,不知道那里出错了

解决方案 »

  1.   

    function send(s: TSocket;Buf: Pchar; len, flags: Integer): Integer; stdcall; 
    var
      Str: string;
    begin
      SetLength(Str, Len * 2);
      BinToHex(Buf, PChar(Str), len);
    end;
    另:send中buf参数应该是: var buf;是不是写错了。
      

  2.   


    改为 var buf 显示正确了 可是为什么这样定义
    msdn
    int send(
      __in  SOCKET s,
      __in  const char *buf,
      __in  int len,
      __in  int flags
    );
      

  3.   

    要把一个string变量中的数据给buf
    如何定义BUF呢?
      

  4.   

    你要首先把Buf里的数据取出来嘛
    直接这样传是有问题的 
      

  5.   

    中间的步骤我能够自己处理
    var
      Buf:Pchar;
    begin
      send(s,Buf,strlen(buf),0);
    end;
    定义为PCHAR 不正确我想知道BUF如何定义
      

  6.   

    var
      Buf:pchar;
      s:string;
    begin
      s:='12345';
      Buf:=pchar(s);
      

  7.   

    var
      Re:Integer;
      Buf:Pchar;
      str:string;
    begin
      str:='!';
      buf:=Pchar(str);
      Re:=send(s,Buf,strlen(buf),0);
      if Re=SOCKET_ERROR then
      begin
        showmessage('发送数据失败');
        exit;
      end;
    end;
    封包助手拦截后, hex数据显示0C 应该为21 才是正确的
      

  8.   

    这部分应该没有问题procedure TForm1.Button1Click(Sender: TObject);
    var
      c:pchar;
      s:string;
    begin
      s:='!';
      c:=pchar(s);
      showmessage(inttostr(ord(c[0])));//显示33就是16进制21
    end;
      

  9.   

    这样转化是有问题的
    我在用move 转换 第一个字符显示是正确的