使用弯路时防止递归钩子

时间:2019-04-30 13:10:12

标签: c++ windows hook detours trampolines

我想通过使用Detours API钩住所有ntdll函数来构建某种API监视器。每个钩子函数将调用原始实现,然后 在std基本数据结构内为此调用添加通知。

但是,我遇到了递归挂钩的情况,其中我的挂钩函数间接调用了自己。

因此,我尝试使用Tls内存为每个线程设置一个位,以指示从钩子函数中调用了当前函数,因此避免再次调用该钩子(仅执行原始函数)。

但是我的递归挂钩保护也使用了一些对内存分配函数的调用,例如NtAllocateVirtualMemory,因此,我目前避免挂钩那些函数。

也许任何人都遇到过类似的问题,并以不触发任何内存分配函数的方式实现了钩子重入防护(这是不可能的,因为即使调用新函数和堆栈 内存不足,应该分配更多的内存。

谢谢

0 个答案:

没有答案