程序环境结构: 
HookAPI.dll 可以对指定进程进行挂接,用来Hook指定的API函数.
          mydll.dll   对要Hook的API建立的仿真API函数(比如:要Hook MessageBoxA, 在mydll.dll 里面建一个参数与返回值完全一样的myMessageBoxA函数 就能截获指定进程中的MessageBoxA )
          HookExe.exe 用来调用HookAPI.dll 并指定要监控的进程。(比如说: test.exe)
          test.exe    一个普通WIN32程序。在窗口中一按钮中执行MessageBoxA函数。我现在可以Hook系统的API,但是无法对自己编写的mydll.dll进行调试,目前一直是打用打印对话框来实现简单测试。当然我要Hook的api不是MessageBoxA这么简单的函数。我想请教做过dll远程挂接或远程注入的朋友,帮我讲一下。如何能调试。 

解决方案 »

  1.   

    第一:可以自己写个程序加载你的dll,这样就可以象普通DLL一样调试了.
    第二:用OutDebugString输出信息,用vc附加或dbgview获得改输出信息.如果是在启动期间做的,写文件吧.
      

  2.   

    The debug code has some stack checking that (i think) inserts "call _chkesp" 
    into the epilog of all functions.  Since you probably didn't inject _chkesp 
    (and the pointer would be hosed even if you did) then the process will 
    crash.  The solution is to turn off all debugging options (not just info) in 
    that module, and add a file log switch in your release build.
      

  3.   

    不清楚你说的调试具体是什么意思。是用vs ide呢还是怎么?是要f5启动呢还是?总的来说,只要你有dll的pdb文件,就可以了。如果是vs 2003,把pdb路径设定好后,直接选择attach target process,加载了pdb文件后,你就可以打开cpp文件直接设定断点了当然,如果你能用windbg调试更好。麻烦一点的情况就是你的代码是动态生成的。比如向内存里面直接写入二进制机器码,然后改变eip指向这个地址执行。关于更多的调试技巧可以参考:
    http://blogs.msdn.com/lixiong/attachment/687357.ashx
      

  4.   

    感谢大家的帮助。 目前使用KeSummer 的方法自己显示加载dll来调,然后在拿到Hook环境下。自己调问题不大,做了一下简单测试。但拿到Hook环境下,问题就多了。eparg() 讲的方法我没太懂, 不好意思我也是才使用VC 两个月的样子,编译器上的好多东西都不太会设置。 能不能讲详细一点。

    总的来说,只要你有dll的pdb文件,就可以了。如果是vs 2003,把pdb路径设定好后,直接选择attach target process,加载了pdb文件后,你就可以打开cpp文件直接设定断点了”
    我是使用的VS2003, 但你说的加载pdb文件,我不知道设置在那个地方
      

  5.   

    我现在在家
    手头只有vs 2005vs 2005中tools -> options -> debugging -> symbols在这里把所有你自己写的dll文件的pdb文件放到一个路径,然后把路径填在上面就可以了然后你就可以选择attach to proces  然后选择file -> open,打开你的cpp文件,直接用f5放断点了