Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2010, 10:02   #1
Memfis1992
Пользователь
 
Аватар для Memfis1992
 
Регистрация: 13.06.2010
Сообщений: 38
Вопрос Получить экспортируемые из DLL функции

Как можно это сделать средствами дельфи???
Memfis1992 вне форума Ответить с цитированием
Старый 29.10.2010, 11:56   #2
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию

Цитата:
Сообщение от Memfis1992 Посмотреть сообщение
Как можно это сделать средствами дельфи???
Декомпиляцией! И то не всегда... В итоге не как!
XerSon вне форума Ответить с цитированием
Старый 29.10.2010, 12:40   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,724
По умолчанию

Цитата:
Декомпиляцией!
Ему не код их нужен, а список.

Код:
HMODULE lib = LoadLibraryEx("library.dll", NULL, DONT_RESOLVE_DLL_REFERENCES);
assert(((PIMAGE_DOS_HEADER)lib)->e_magic == IMAGE_DOS_SIGNATURE);
PIMAGE_NT_HEADERS header = (BYTE *)lib + ((PIMAGE_DOS_HEADER)lib)->e_lfanew;
assert(header->Signature == IMAGE_NT_SIGNATURE);
assert(header->OptionalHeader.NumberOfRvaAndSizes > 0);
PIMAGE_EXPORT_DIRECTORY exports = (BYTE *)lib + header->
    OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress;
PVOID names = (BYTE *)lib + exports->AddressOfNames;
for (int i = 0; i < exports->NumberOfNames; i++)
    printf("Export: %s\n", (BYTE *)lib + ((DWORD *)names)[i]);
http://msdn.microsoft.com/ru-ru/maga...05(en-us).aspx
p51x вне форума Ответить с цитированием
Старый 29.10.2010, 13:06   #4
Memfis1992
Пользователь
 
Аватар для Memfis1992
 
Регистрация: 13.06.2010
Сообщений: 38
По умолчанию

p51x,спасибо ,очень долго искал как так сделать))ещё раз спс!!!
Memfis1992 вне форума Ответить с цитированием
Старый 30.10.2010, 13:05   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Что-то я там Дельфи не обнаружил...
Вот какой вариант есть:
Код:
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;
mihali4 вне форума Ответить с цитированием
Старый 30.10.2010, 13:24   #6
Memfis1992
Пользователь
 
Аватар для Memfis1992
 
Регистрация: 13.06.2010
Сообщений: 38
По умолчанию

mihali4,мне то же так сначала показалось..но новичок поэтому сразу незаметил ничего криминального)))))Спасибо..ты реально ответил на мой вопрос..Спасибо!!!
Это наверно самый лучший сайт по Дельфи...плюс -сдесь обитаюь нормальные люди..вообщем респект вам сем..всё здорово!!!

А куда надо вот это писать???

аааа..всё понял это надо ыбло писать после ключевого слова implementation

Последний раз редактировалось mihali4; 30.10.2010 в 18:15.
Memfis1992 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как получить резултат функции unmazable Общие вопросы C/C++ 1 21.10.2010 08:46
Как получить базу индексов таблицы экспорта DLL ? Wardrag Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 21.08.2010 21:25
Как получить из функции массив LOST94 Общие вопросы C/C++ 6 28.03.2010 13:47
Получить значения функции sin(x) (Pascal) Женек Помощь студентам 1 30.01.2010 00:23
Как передать какртинку и получить картику из dll?(она не в ресурсах) puga555 Общие вопросы Delphi 7 22.12.2009 16:37