2

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

但是,我遇到了一个递归挂钩的场景,我的挂钩函数间接调用了自己。

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

但是我的递归钩子守卫也使用了一些内存分配函数的调用NtAllocateVirtualMemory,因此我目前正在避免挂钩这些函数。

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

谢谢

4

0 回答 0