mysend()
st.Read(Buf, st.Size);//当length(buf)< st.Size 时 当然出错
只能 getMem(Bufst.Size)
再 st.Read(Buf, st.Size);

解决方案 »

  1.   

    都不行
    buf 长度不变的情况下很容易修改. 长度变了就不行了. buf用GetMem不允许修改长度
    所以只有用自己变量替换buf, char数组/pchar都不行. 谁给个例子????
      

  2.   

    好吧,看了下你的代码,你最后把修改后的数据又传回buf。这是多此一举的
    直接传递st就行了随手写的
    oldsend(s, st.memory^, st.Size, flags);
      

  3.   

    getMem(Buf,st.Size)
    这个是重新分配内存了 都不行 ?
    要不 
    pSend:PChar;
    getMem(pSend,st.Size);
     st.Read(pSend,st.Size);   
     Result :=oldsend(s, pSend, st.Size, flags);
    FreeMem(pSend);
      

  4.   

    这个正解  
    要不 你的hook 用错了 变成死循环 
      

  5.   

    madCodeHook 搞的. 
    代码就上面那些啊. 死循环不可能的. 我替换字符串长度不变的情况是正确的. 长度变了就不行
      

  6.   

    ss := StringReplace(ss, '*/*', '1/1', [rfReplaceAll, rfIgnoreCase]);//正确
    ss := StringReplace(ss, '*/*', '11111/111', [rfReplaceAll, rfIgnoreCase]);//失败
      

  7.   

    这应该无解. len 好像不能变
      

  8.   

    楼主解决了没?解决了的话透露下方法
    我也遇到这个问题了,刚开始不知道是什么原因
    调试了半天,终于发现原来是长度不能变,不管是加减都会卡住,buf是可以变的,唯独len不能变
      

  9.   

    报文有个pv4 header 里面有个数据叫 lenth 记录里数据的长度.改就回返回错误.就像http.会返回400错误一样