我成功HOOK了 connect,send/recv和sendto/recvfrom函数,
这些函数里都有一个相同的参数s:Tsocket,这个s在内存里是同一份拷贝吗?
s在内存里给这些函数共享?如果我HOOK了connect并且在处理代码里修改了s的值,
是不是也能影响到HOOK其他函数的s?也就是说当我再HOOK send等函数的时候,
这时里面是s已经是我在HOOK了connect里修改了s的值了?

解决方案 »

  1.   

    网络方面不熟……
    应该是一个共享……如果是一个共享的话,Hook一个s就能影响到全部函数,那么你说的s就已经是Hook里面修改过的s了
      

  2.   

    to 4楼 看清楚问题,是在HOOK的环境下。
      

  3.   


    type
      u_int = Integer;
      TSocket = u_int;
    function send(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;传值,4字节,和句柄类似的东西。
      

  4.   

    function Myconncet(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
    begin
    //......
      s:=socket(AF_INET,SOCK_STREAM,0);//比如这样。
    //......
    end;
      

  5.   

    呵呵都没有注意看我把参数复制错了。function Myconncet(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
    begin
    //......
      s:=socket(AF_INET,SOCK_STREAM,0);//比如这样。
    //......
    end;
      

  6.   

    s: TSocket这个定义前面没有var或out,你修改了它的地址也带不回去,对外部就没有影响。
    但因为它是元件,所以任何对它的状态改变,外部都能感受到变化。