1.例如hook了函数createfile,跳转到我实现的一个my_createfile中。2.在my_createfile中需要使用createfile,这样是不是陷入了循环?应该怎么判断这个函数是谁发起的?3.hook其它函数怎么处理,使用同样方法么?

解决方案 »

  1.   

    请教用什么方法排除?我的程序是一个dll注入到explorer中的
      

  2.   

    调用原先的函数前先恢复,调用完了再hook,这是正解
      

  3.   

    这样做是可以的,但有更好的办法,建议楼主去看看detour库
      

  4.   

    这个会有重入的问题吧?如果楼主是想学习HOOK的原理,写个差不多的例子感受下就可以了
    如果是想做点什么东西的话,还是用现有的库比较好一些
      

  5.   

    inline嘛  跳到自己的函数处理完了跳回去
      

  6.   

    在你恢复的时候,其他线程调用,你不是 HOOK 不到了?当然不是正解!简单说下我的解决吧,我是用 detour 的
    比如 HOOK 了 A,B,C,D 函数,需要在 HOOK 中满足任意交叉和组合调用
    本人设计了一个同步类,数据结构为一张表,数据项为线程 ID 和计数
    每次 HOOK 进去后判断是否 pass
    并用 RAII 技术来进行计数增减,注:RAII 就是析构自动释放的那种,可以看我以前的博客:
    http://blog.csdn.net/IamRainLiang/archive/2008/01/29/2071742.aspx