Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получить экспортируемые из DLL функции

Delphi , Файловая система , DLL и PlugIns

Получить экспортируемые из DLL функции

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   ImageHlp;

 procedure ListDLLExports(const FileName: string; List: TStrings);
 type
   TDWordArray = array [0..$FFFFF] of DWORD;
 var
   imageinfo: LoadedImage;
   pExportDirectory: PImageExportDirectory;
   dirsize: Cardinal;
   pDummy: PImageSectionHeader;
   i: Cardinal;
   pNameRVAs: ^TDWordArray;
   Name: string;
 begin
   List.Clear;
   if MapAndLoad(PChar(FileName), nil, @imageinfo, True, True) then
   begin
     try
       pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress,
         False, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize);
       if (pExportDirectory <> nil) then
       begin
         pNameRVAs := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
           DWORD(pExportDirectory^.AddressOfNames), pDummy);
         for i := 0 to pExportDirectory^.NumberOfNames - 1 do
         begin
           Name := PChar(ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
             pNameRVAs^[i], pDummy));
           List.Add(Name);
         end;
       end;
     finally
       UnMapAndLoad(@imageinfo);
     end;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 var
   List: TStrings;
   i: Integer;
   s: string;
 begin
   List := TStringList.Create;
   try
     ListDLLExports('C:\WINDOWS\SYSTEM32\browseui.dll', List);
     ShowMessage(IntToStr(list.Count) + ' functions in dll');
     s := 'List of functions:';
     for i := 0 to List.Count - 1 do
       s := s + #13#10+List[i];
     ShowMessage(S);
   finally
     List.Free
   end;
 end;

Программа на Delphi для списка экспортированных функций из файла DLL (Dynamic Link Library). Вот подробное описание, что код делает:

Процедура ListDLLExports

Эта процедура принимает два параметра: FileName, имя файла DLL, который нужно проверить, и List, объект TStrings, который будет хранить список экспортированных функций.

Продcedure использует несколько переменных для хранения указателей на различные структуры в файле DLL:

  • imageinfo: структура LoadedImage, которая представляет загруженный образ DLL.
  • pExportDirectory: указатель на структуру ImageExportDirectory, которая содержит информацию о экспортном каталоге DLL.
  • dirsize: целочисленная переменная, которая хранит размер экспортного каталога.
  • pDummy: указатель на структуру ImageSectionHeader (которая не используется в этом коде).
  • i: целочисленный цикл переменная.
  • pNameRVAs: указатель на массив TDWordArray, который содержит имена экспортированных функций.

Продcedure выполняет следующие действия:

  1. Очищает объект List.
  2. Карта и загружает файл DLL с помощью функции MapAndLoad.
  3. Если карта была успешной, пытается доступ к экспортному каталогу DLL с помощью функции ImageDirectoryEntryToData.
  4. Если экспортный каталог был найден, циклично проходит по каждой экспортированной функции в каталоге с помощью цикла for.
  5. Для каждой функции использует функцию ImageRvaToVa для преобразования RVA (Relative Virtual Address) имени функции в виртуальную адресу, которая может быть использована Delphi.
  6. Имя функции добавляется к объекту List.
  7. Наконец, процедура размапляет и разгружает файл DLL с помощью функции UnMapAndLoad.

Процедура Button1Click

Эта процедура является обработчиком события нажатия кнопки на форме (TForm1). Она выполняет следующие действия:

  1. Создает новый объект TStringList для хранения списка экспортированных функций.
  2. Вызывает процедуру ListDLLExports с именем файла DLL 'C:\WINDOWS\SYSTEM32\browseui.dll' и присваивает результат к объекту List.
  3. Показывает сообщение о количестве экспортированных функций в файле DLL.
  4. Циклично проходит по каждой функции в списке и конкатенирует их в строку s.
  5. Показывает другое сообщение с списком функций.

Код довольно прост и использует различные функции из единицы ImageHlp для манипуляции образом DLL и извлечения информации о его экспортированных функциях.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DLL и PlugIns ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:10:29/0.0058388710021973/1