Подключение функций Windows API для перехвата загрузки dll (только для Windows)

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

Пример вывода:

C: \ Windows \ syswow64 \ kernel32.dll Module32NextW

C: \ Windows \ syswow64 \ kernel32.dll CreateToolhelp32Snapshot

C: \ Windows \ system32 \ DINPUT.dll DirectInputCreateW

C: \ Windows \ SysWOW64 \ ntdll.dll DirectDrawCreate

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

По сути, я хочу иметь возможность вызывать GetModuleInformation для любой загруженной DLL.


person user246100    schedule 07.02.2010    source источник
comment
Дубликат http://stackoverflow.com/questions/873658/how-can-i-hook-windows-functions-in-cc и многие другие похожие вопросы.   -  person mghie    schedule 08.02.2010
comment
Я не знаю, называть вас именами или игнорировать вас. Я не хочу знать, как подключать функции. Я хочу знать, какие функции нужно подключить, чтобы перехватить загрузку Dll.   -  person user246100    schedule 08.02.2010


Ответы (2)


Во-первых, что вы делаете, для чего нужен глобальный перехватчик?

Если вы хотите получать уведомление о том, что DLL загружена в какой-либо процесс, вы можете заглянуть в PsSetImageLoadNotifyRoutine, подпрограмму режима ядра. Несмотря на то, что это режим ядра, его не очень сложно использовать, а написать базовый драйвер довольно весело.

Другой способ - принудительно загружать вашу библиотеку в каждом процессе. Существует множество методов, одним из наиболее подходящих будет обработчики сообщений Windows.

person Daniel Goldberg    schedule 30.11.2010
comment
Привет. Я только что увидел ваш ответ, извините за это. Это предназначено для перехвата загрузки игры и последующего изменения ее работы. Как читы. Я видел код, который обнаруживает это, используя постоянный цикл и выясняя, был ли внутри него создан процесс (по имени). Я искал более чистый способ сделать это, и ваше предложение о базовом драйвере для Windows кажется мне приятным. Спасибо! - person user246100; 08.07.2011

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

person Sam Blackburn    schedule 08.02.2010
comment
Вопрос был в том, как сделать его общесистемным. - person user246100; 08.07.2011
comment
Любая ловушка, которую вы устанавливаете для своего процесса, не копируется из-за функции копирования при записи. Чтобы перехватить код глобально, вам нужно вставить себя глобально. - person Daniel Goldberg; 08.07.2011