На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Как просмотреть экспорт. функции DLL-библиотеки
    Как просмотреть экспортируемые функции DLL-библиотеки
      Для MSVC вроде так:
      dumpbin /exports /out:имя_выходного_файла имя_dll
        А реально ли это сделать программно ?
          Скачай эту файлу, покопайся в pedump.c и много чего подчерпнёшь для себя.
            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
            "

              но это для одного exe файла. Если надо перехватывать ф-ю во все загружаемых библиотеках, то есть другой пример функции
                Цитата IgnSerg, 10.10.03, 21:42:56
                но это для одного exe файла. Если надо перехватывать ф-ю во все загружаемых библиотеках, то есть другой пример функции


                А где бы мне взять этот пример :-)
                  Только это немного не в тему.
                  Пример - перехват вызова на осное таблицы импорта. А тема - "Как просмотреть экспорт. функции DLL-библиотеки"

                  Цитата
                  А где бы мне взять этот пример

                  -
                  Цитата
                  © J.Rihter "WINDOWS  
                  Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows

                  http://www.proglib.ru/detail_book.asp?id=190
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0230 ]   [ 15 queries used ]   [ Generated: 18.05.24, 07:27 GMT ]