Перехват WinAPI-функций, вызываемых из DLL - PullRequest
1 голос
/ 28 сентября 2011

У меня есть файл DLL library.dll , который содержит функцию foo .Функция foo вызывает функцию WinAPI goo .Я написал приложение, которое вызывает foo из library.dll .Проблема в том, что я хочу переопределить вызов функции goo моей собственной функцией hoo Я объявил в приложении (не в DLL).

Как можноПерехватить вызов функции goo ?Я не ищу глобальный хук, я просто хочу переопределить вызовы, сделанные приложением, которое я написал.

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Исправление дескриптора импорта для goo в таблице адресов импорта library.dll. Исправление IAT является хорошо известным методом перехвата для перехвата вызовов функций между двумя модулями PE.

1 голос
/ 28 сентября 2011

Существует библиотека под названием Detours, предоставляемая Microsoft Research: http://research.microsoft.com/en-us/projects/detours/.. Вы можете использовать ее для перенаправления любого вызова API в Windows.

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

Экспресс-версия Detours бесплатна, но ограничена для некоммерческого использования на архитектуре x86.

...