Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.103.234] |
|
Сообщ.
#1
,
|
|
|
Как просмотреть экспортируемые функции DLL-библиотеки
|
Сообщ.
#2
,
|
|
|
Для MSVC вроде так:
dumpbin /exports /out:имя_выходного_файла имя_dll |
Сообщ.
#3
,
|
|
|
А реально ли это сделать программно ?
|
Сообщ.
#4
,
|
|
|
Скачай эту файлу, покопайся в pedump.c и много чего подчерпнёшь для себя.
|
Сообщ.
#5
,
|
|
|
by J.Rihter:
правда сосканиная с книжки, так могут быть ошибки void ReplaceIATEntryInOneMod(PCSTR pszCalleeModName, PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller) { ULONG ulSize; PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR) ImageDirectoryEntryToData(hmodCallor, TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize); if (pImportDesc == NULL) return,; // в этом модуле нет раздела импорта // находим дескриптор раздела импорм со ссылками // на функции DLL (вызываемого модуля) for (; pImportDesc->Name; pImportDesc++) { PSTR pszModName = (PSiR) ((PBYFE) hmodCaller + pImportDcsc->Name); if (lstrcmpiA(pszModName, pszCalleeModName) == 0) break; } if (pImportDesc->Name == 0) // этот модуль не импортирует никаких функций из данной DLL return; // получаем таблицу адресов импорта (IAT) для функций DLL PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA) ((PBYTE} hirodCaller + pImportDesc->FirstThunk); // заменяем адреса исходных функций адресами своих функций for (; pThunk->u1.Function; pThunk++) { // получаем адрес адреса функции PROC* ppfn = (PROC*) &pThunk->u1.Function; // та ли это функция, которая нас итересует? BOOL fFound = (*ppfn == pfnCurrent); // см. текст программы-примера, в котором // содержится трюковый код для Windows 98 if (fFound) { // адреса сходятся, изменяем адрес в разделе импорта WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL ); return; // получилось, выходим } } // если мы попали сюда, значит, в разделе импорта // нет ссылки на нужную функцию } использование: PROC pfnOrig = GctProcAddress(GetModuleHandle("Kernel32"), "ExitProcess"); HMODULE hmodCaller = GetModuleHandle("DataBase.exe"); void RoplaceIATEntryInOrioMod( "Kernel32.dll", // модуль, содержащий ANSI-функцию pfnOrig, // адрес исходной функции в вызываемой DLL MyExitProcess, // адрес заменяющей функции hmodCaller); // описатель модули, из которого надо вызывать новую функцию (c) J.Rihter "WINDOWS Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows " |
Сообщ.
#6
,
|
|
|
но это для одного exe файла. Если надо перехватывать ф-ю во все загружаемых библиотеках, то есть другой пример функции
|
Сообщ.
#7
,
|
|
|
Цитата IgnSerg, 10.10.03, 21:42:56 но это для одного exe файла. Если надо перехватывать ф-ю во все загружаемых библиотеках, то есть другой пример функции А где бы мне взять этот пример :-) |
Сообщ.
#8
,
|
|
|
Только это немного не в тему.
Пример - перехват вызова на осное таблицы импорта. А тема - "Как просмотреть экспорт. функции DLL-библиотеки" Цитата А где бы мне взять этот пример - Цитата © J.Rihter "WINDOWS Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows http://www.proglib.ru/detail_book.asp?id=190 |