Предотвратить рекурсивное зацепление при использовании объездных путей - PullRequest
0 голосов
/ 30 апреля 2019

Я хотел создать своего рода монитор API, подключив все функции ntdll, используя Detours API. Каждая подключенная функция будет вызывать оригинальную реализацию, а затем добавить уведомление для этого вызова в структуре данных базы std.

Однако я столкнулся со сценарием рекурсивного перехвата, когда моя перехваченная функция косвенно вызывает себя.

Поэтому я попытался использовать память Tls для установки бита на поток, который указывает на то, что текущая функция вызывается из подключаемой функции, поэтому избегайте повторного вызова ловушки (выполняйте только исходную функцию).

Но мой рекурсивный хук-охрана также использует некоторые вызовы для функции выделения памяти, такие как NtAllocateVirtualMemory, и поэтому в настоящее время я избегаю перехватывать эти функции.

Возможно, кто-нибудь сталкивался с подобной проблемой и реализовал защиту от повторного входа в ловушку таким образом, чтобы не вызывать какую-либо функцию выделения памяти (что может быть невозможно, так как даже если вы вызываете новую функцию и ваш стек памяти недостаточно, следует выделить больше памяти).

спасибо

...