function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
   dwSize: cardinal;
   tmp:string;
begin
   //这儿进行发送的数据处理
  // setlength(tmp,len);
  // move(buf,tmp[1],len);
  // showmessage(temp);   MessageBeep(1000);            //简单的响一声
   //调用直正的Send函数
   WriteProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize);
   Result := OldSend(S, Buf, len, flags);
   JmpCode.Address := @MySend;
   WriteProcessMemory(ProcessHandle, AddSend, @JmpCode, 8, dwSize);
end;我用string显示出来是乱码.我需要显示成16进制.不知道buff应该怎么转换?

解决方案 »

  1.   

    以前 写过个 函数
    丢了
    大概是这样function StrToHex(IStr:string):string;
    var
      I,NilCount:integer;
    begin
      I:= 1;
      result := '';
      while true do begin
        if I > length(IStr) then break;    if IStr[I] <> #0 then begin
          result := result + inttoHex(Byte(IStr[I]),2);
        end else begin//空字符数量
          NilCount := 1;
          while true do begin
            if (I > length(IStr)) or (IStr[I] <> #0) then break;
            Inc(I);
            Inc(NilCount);
          end;
          result := result + '['+inttoStr(NilCount)+']';
          Continue;
        end;    Inc(I);
      end;end;
      

  2.   

    result := result + '['+inttoStr(NilCount)+']';这句是什么意思??为什么要把计数加上去?
      

  3.   

    可以用BinToHex函数把内存直接转成十六进制。
      

  4.   

    我如果要过滤buf怎么能把buf中的数据全部替换成0