С ++ функциональный хук - PullRequest
0 голосов
/ 10 июля 2011

У меня есть исходный код для DLL.Скомпилированная DLL загружается приложением.Приложение также загружает несколько других DLL.Я разобрал ассемблерный код из приложения и всех DLL, но у меня есть только исходный код из одной DLL.Приложение и все библиотеки DLL являются одним процессом.

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

Проблема в том, что я не могу подключить одну DLL напрямую, потому что она не является собственнойпроцесс.Каким-то образом я должен подключить библиотеки DLL, которые загружаются в приложение.Как это сделать?

Для справки, я не могу подключить функцию со смещением от одной DLL, потому что эта функция находится в памяти приложения, а не в памяти самого процесса DLL!

1 Ответ

0 голосов
/ 10 июля 2011

Для справки, я не могу подключить функция со смещением от одной DLL, потому что функция находится внутри память о приложении, а не в память самого процесса DLL!

Когда DLL загружается процессом, он загружается в адресное пространство этого процесса. У DLL нет собственного процесса. Если вы хотите подключить функцию к DLL, работающей в удаленном процессе, вы можете вставить свою собственную DLL в удаленный процесс. Теперь ваша внедренная DLL разделяет адресное пространство целевого процесса и вашу целевую DLL. Из вашего собственного кода DLL вы можете вызывать API, такие как GetModuleHandle, чтобы получить базовый адрес вашей целевой DLL, и обрабатывать весь код перехвата из вашей DLL, потому что ваш код выполняется не в «вашем» приложении, а их, как будто они сами загрузили его.

...