我发现在目标进程安装Hook的时候不会运行DllMain,那我需要在安装Hook的时候执行的代码怎么办?
还有,就是把模块插入到远程进程里面了怎么调试,谢谢。

解决方案 »

  1.   


    DllMain只是在载入时调一次
    做另一个接口就是了比如 installhook 什么的
      

  2.   

    工程->设置->debug 标签可执行调式程序栏里填上你的 exe 程序路径
      

  3.   

    那实际上安装Hook,就是在目标进程安装了这个DLL,为什么不会在目标进程里面运行DllMain呢?
      

  4.   

    都说了 DllMain只是在载入时调一次
      

  5.   

    如果你安装钩子的步骤正确,在这个执行顺序下会执行dllmain,运行装载钩子的程序执行installhook,然后运行目标进程.
    调试的方法:
    工程->设置->debug 标签 可执行调式程序栏里填上你的目标进程程序路径
    先执行装载程序,然后在你的dll中按F5,就可以调试了
      

  6.   

    那如果是VC.net 2002怎么办,根本没有那个“工程”菜单
      

  7.   

    DllMain在加载和泄载时调用,而且Hook用的DLL不要去调试,打断点没用的,不会断的。
      

  8.   

    DLLMain是在该DLL将地址映射到进程的地址空间时运行的。当安装HOOK的时候DLLMAIN已经结束。
      

  9.   

    那有一个问题,你安装hook的时候,就要在hook的进程里面插入这个DLL,为什么这个映射的时候就没有运行DllMain,而只有第一个进程运行了DllMain
      

  10.   

    如果安装正确,肯定运行了DllMain的。
    BTW,通过设断点的方法你只能知道你安装hook的那个进程有没有调DllMain,没办法知道你的“目标进程”有没有调用DllMain。
      

  11.   

    问题解决了。
    其实,用Hook来做DLL注入的时候,有一个问题,就是如果DLL并不会在安装Hook的时候马上注入,而是在第一次用到Hook进程的时候才注入的。
    我最后是在安装了Hook以后马上给那个窗口SendMessage,激活这个Hook,就解决了。