Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Раздел импорта ехе-файла [D7, Win2k, WinXP]


Ботвин Дмитрий ©   (2005-08-11 10:58:00) 

Всем привет! Подскажите, кто знает, как можно для ехе-файла прочитать раздел импорта и получить список всех dll-модулей, котрые он использует. Даже если он в какой-то момент времени и
не загружает их. Спасибо!


Ботвин Дмитрий   (2005-08-11 12:44:00) [1]

Понял, всем спасибо!!!


Digitman   (2005-08-11 12:01:00) [2]


> Я так понял, что список тех модулей, которые загружаются
> явно, получить не получиться?


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

- под НТ : EnumProcessModules() (psapi.pas)
- под Маздаем : Module32First/Next (tlhelp32.pas)


wal   (2005-08-11 11:46:00) [3]


> Я так понял, что список тех модулей, которые загружаются
> явно, получить не получиться?
В принципе, запустив программу из под делфи, можно получить список модулей, используемых В ДАННЫЙ МОМЕНТ. А если программно, без запуска исследуемого процесса, в общем случае, видимо, никак.

С уважением.


Ботвин Дмитрий   (2005-08-11 11:42:00) [4]

Digitman ©   (11.08.05 11:36) [3]

Огромное спасибо! С таблицей импорта ты меня жутко выручил!!!

Я так понял, что список тех модулей, которые загружаются явно, получить не получиться?


Digitman   (2005-08-11 11:36:00) [5]

например, так :

                 pOptHdr := PImageOptionalHeader(hImporter + PImageDosHeader(hImporter)._lfanew + SIZE_OF_NT_SIGNATURE + IMAGE_SIZEOF_FILE_HEADER);
                 if pOptHdr^.NumberOfRvaAndSizes = 16 then
                   begin
                     dwDirSize := pOptHdr^.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size;
                     if dwDirSize > 0 then
                       begin
                         pImpDir := PImageImportDescriptor(hImporter + pOptHdr^.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);

результат - в pImpDir ты получаешь указатель на первый эл-т таблицы импорта модуля hImporter


Ботвин Дмитрий   (2005-08-11 11:26:00) [6]

Digitman ©   (11.08.05 11:18) [1]

Про явный способ загрузки Dll я понял, а как получить хотя бы
те, которые загружаются неявным способом и прописаны в таблице
импорта?


Digitman   (2005-08-11 11:18:00) [7]


>  Даже если он в какой-то момент времени и
> не загружает их


если не загружает, значит в разделе импорта нет соотв.сведений

раздел импорта используется сист.загрузчиком на этапе иниц-ции исп.модуля, еще ДО передачи управления на точку входа .. явный LoadLibrary  в ходе выполнения программы (если ты об этом) не использует таблицу импорта


Наверх

Титульная страница Поиск, карта сайта Написать письмо