Перехват вызовов API в текущем процессе? - PullRequest
5 голосов
/ 22 января 2011

Как мне перехватить / перенаправить функцию в DLL (скажем, CreateThread из Kernel32.dll), загруженной в текущий процесс?

(я неиметь контроль над тем, какие фрагменты кода вызывают CreateThread, поэтому я не могу просто вместо кода иметь другой код.)

Язык не имеет большого значения;Я предполагаю, что C / C ++ был бы лучшим выбором для этого.


Обновление:

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

Но благодаря тем, кто упомянул внешнюю библиотеку;извините, я не говорил этого раньше.

Ответы [ 3 ]

3 голосов
/ 23 января 2011

(Скорее всего, это было бы более уместно в качестве «комментария» под ответом «Объезд», но, поскольку моя «репутация» еще не достаточна для добавления комментариев, я думаю, позвольте мне опубликовать его как ответ)

В этом посте в этой теме («Вопрос DirectShow») упоминается альтернатива / домашняя альтернатива Detours (с некоторым грубым примером кода) Алессандро Анджели.

Я впервые обнаружил, что он цитируется в другом потоке («проблема с перехватом совместного создания») при поиске перехватывания / отслеживания создания COM-компонента (Этот второй поток более сфокусирован на перехвате перехвата хотя).

Позвольте мне также добавить ссылку для WinAPIOverride32 (автор Жаклин Потье) для удобства. Похоже, что у него "GUI, разработанный разработчиком" :), но никаких нареканий нет, так как он с открытым исходным кодом (как упомянуто выше).

3 голосов
/ 22 января 2011

Для этого есть библиотека MS: Объезд

2 голосов
/ 22 января 2011

Проверьте http://easyhook.codeplex.com/

Это фреймворк API Hooking.Его открытый исходный код, очень прост в использовании!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...