我想通过使用Detours
API钩住所有ntdll函数来构建某种API监视器。每个钩子函数将调用原始实现,然后
在std基本数据结构内为此调用添加通知。
但是,我遇到了递归挂钩的情况,其中我的挂钩函数间接调用了自己。
因此,我尝试使用Tls内存为每个线程设置一个位,以指示从钩子函数中调用了当前函数,因此避免再次调用该钩子(仅执行原始函数)。
但是我的递归挂钩保护也使用了一些对内存分配函数的调用,例如NtAllocateVirtualMemory
,因此,我目前避免挂钩那些函数。
也许任何人都遇到过类似的问题,并以不触发任何内存分配函数的方式实现了钩子重入防护(这是不可能的,因为即使调用新函数和堆栈 内存不足,应该分配更多的内存。
谢谢