Когда вызывается Windows Hook, какой код запускается? - PullRequest
0 голосов
/ 15 апреля 2020

Документация для SetWindowsHookEx гласит:

Если приложение требует использования хуков в других процессах, требуется, чтобы 32-битное приложение вызывало SetWindowsHookEx для внедрения 32-битной DLL в 32 -битные процессы и 64-битное приложение вызывают SetWindowsHookEx для внедрения 64-битной DLL в 64-битные процессы.

Это строго подразумевает, что когда вызывается обратный вызов фильтра хука, это код внутри копии подключенного приложения библиотеки DLL перехвата.

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

Так что же это? Когда вызывается обратный вызов фильтра ловушек, какой код фактически выполняется, код внутри целевого (перехваченного) приложения или код внутри приложения, которое установило ловушку?

Спасибо

1 Ответ

0 голосов
/ 16 апреля 2020

SetWindowsHookEx не берет только указатель на функцию: он берет указатель на функцию вместе с дескриптором библиотеки DLL, в которой определена функция. Учитывая, что ядро ​​может вычислить адрес функции относительно на базовый адрес DLL. Затем он (по крайней мере, в некоторых случаях) внедряет DLL в другие процессы в системе, пересчитывает адрес (при необходимости; базовый адрес DLL обычно фиксируется, поэтому код не должен быть независимым от позиции. Перемещение все же возможно, хотя ) и устанавливает хук в целевом процессе. (Согласно комментарию Ханса Пассанта, это происходит только для некоторых хуков, в то время как другие выполняются в исходном процессе).

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

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