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

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

Узнать какие dll - ки запрашивает ехе-шник [D7, WinXP]


ATarget ©   (2005-06-08 00:41:00) 

У меня вот какая проблема мне надо получить список всех библиотек которые использует программа (не моя конечно :)) в работе по типу того как ехеSkorp делает. Я думал написать какой нит поиск подобия строк в файле как бы по шаблону *.dll но вышло так геморно и долго что у меня духу не хватило. Так вот теперь о главном можно ли выполнить данную задачу как нить попроще и чтоб 3 Мб не колбасило 3 мин. 48 сек. как у меня выходило.


deep   (2005-06-09 18:25:00) [1]

http://deep.webest.net/forum/reply.php?num=1.2&id=174321&from=4


Просто Джо   (2005-06-09 16:24:00) [2]


>  [13] Игорь Шевченко ©   (09.06.05 11:37)
> Я не вижу классов

А это г-л-ю-к :)


Игорь Шевченко   (2005-06-09 11:37:00) [3]


> Вот вам классы:


Я не вижу классов


g-l-u-k   (2005-06-09 11:01:00) [4]

Вот вам классы:

TYPE
IMAGE_DIR_ITEM=record
                        VirtualAddress:DWORD;
                        Size:DWORD;
                end;

IMAGE_FILE_HEADER=record
                        Machine:WORD;
                        NumberOfSections:WORD;
                        TimeDateStamp:DWORD;
                        PointerToSymbolTable:DWORD;
                        NumberOfSymbols:DWORD;
                        SizeOfOptionalHeader:WORD;
                        Characteristics:WORD;
                 end;

IMAGE_OPTIONAL_HEADER=record
                            Magic:WORD;
                            MajorLinkerVersion:BYTE;
                            MinorLinkerVersion:BYTE;
                            SizeOfCode:DWORD;
                            SizeOfInitializedData:DWORD;
                            SizeOfUninitializedData:DWORD;
                            AddressOfEntryPoint:DWORD;
                            BaseOfCode:DWORD;
                            BaseOfData:DWORD;
                            ImageBase:DWORD;
                            SectionAlignment:DWORD;
                            FileAlignment:DWORD;
                            MajorOperatingSystemVersion:WORD;
                            MinorOperatingSystemVersion:WORD;
                            MajorImageVersion:WORD;
                            MinorImageVersion:WORD;
                            MajorSubsystemVersion:WORD;
                            MinorSubsystemVersion:WORD;
                            Win32VersionValue:DWORD;
                            SizeOfImage:DWORD;
                            SizeOfHeaders:DWORD;
                            CheckSum:DWORD;
                            Subsystem:WORD;
                            DllCharacteristics:WORD;
                            SizeOfStackReserve:DWORD;
                            SizeOfStackCommit:DWORD;
                            SizeOfHeapReserve:DWORD;
                            SizeOfHeapCommit:DWORD;
                            LoaderFlags:DWORD;
                            NumberOfRvaAndSizes:DWORD;
                            IMAGE_DIRECTORY_ENTRIES:record
                                                   _EXPORT:IMAGE_DIR_ITEM;
                                                   IMPORT:IMAGE_DIR_ITEM;
                                                   RESOURCE:IMAGE_DIR_ITEM;
                                                   EXCEPTION:IMAGE_DIR_ITEM;
                                                   SECURITY:IMAGE_DIR_ITEM;
                                                   BASERELOC:IMAGE_DIR_ITEM;
                                                   DEBUG:IMAGE_DIR_ITEM;
                                                   COPYRIGHT:IMAGE_DIR_ITEM;
                                                   GLOBALPTR:IMAGE_DIR_ITEM;
                                                   TLS:IMAGE_DIR_ITEM;
                                                   CONFIG:IMAGE_DIR_ITEM;
                                                   BOUND_IMPORT:IMAGE_DIR_ITEM;
                                                   IAT:IMAGE_DIR_ITEM;
                                                    end;
                            DUMB:ARRAY [1..24] OF BYTE;
                     end;

SECTION=record
              Name:packed array [0..IMAGE_SIZEOF_SHORT_NAME-1] of Char;
              VirtualSize:DWORD;
              VirtualAddress:DWORD;
              SizeOfRawData:DWORD;
              PointerToRawData:DWORD;
              PointerToRelocations:DWORD;
              PointerToLinenumbers:DWORD;
              NumberOfRelocations:WORD;
              NumberOfLinenumbers:WORD;
              Characteristics:DWORD;
       end;

CONST
MAX_SECTION_NUMBER= $10;

VAR
   PE_HEADER:record
                IMAGE_NT_SIGNATURE:DWORD;
                FILE_HEADER:IMAGE_FILE_HEADER;
                OPTIONAL_HEADER:IMAGE_OPTIONAL_HEADER;
         end;
                SECTION_HEADER:ARRAY [1..MAX_SECTION_NUMBER] of SECTION;


Игорь Шевченко   (2005-06-09 10:41:00) [5]

depends.exe и не париться.

Никакой динамический анализ кода не поможет.

На носу что ли вырубать ? :)


ANB   (2005-06-08 23:27:00) [6]


> NikotiN ©   (08.06.05 23:21) [8]
- это только статику так достанешь. А динамику - см. PVOzerski ©   (08.06.05 17:34) [7]


Просто Джо   (2005-06-08 23:27:00) [7]


>  у delphi даже все классы\записи для этого есть.
> только непомню какие. :)

В модуле Windows.pas имееется только частичноеописание PE-заголовка в виде записей. Плюс набор констант. Никаких специальных классовдля разбора PE-заголовков AFAIK -- нет, да и зачем они бы там были. Задача ведь исключительно узкоспециальная.


NikotiN   (2005-06-08 23:21:00) [8]

delphi\bin\tdump.exe там, кажется пишет, откуда функции импортируются.

тот же PE заголовок можно в пару строчек разобрать на своей программе, у delphi даже все классы\записи для этого есть.
только непомню какие. :)


PVOzerski   (2005-06-08 17:34:00) [9]

Есть как минимум 2 способа подключения библиотек dll (не считая COM) - 1) при загрузке, когда используется секция .idata, и позже - через LoadLibrary. Соответственно, нужно еще и дизассемблировать вызовы этой функции :( :)...


Digitman   (2005-06-08 09:09:00) [10]


> вобще то, он их может и не загрузить их на данный момент


.. или вообще ни разу не загрузить, если алгоритм программы за весь исследуемый сеанс ни разу не пойдет по той ветке, где модуль потенциально используется


Vlad Oshin   (2005-06-08 08:58:00) [11]

вобще то, он их может и не загрузить их на данный момент...


Vlad Oshin   (2005-06-08 08:51:00) [12]

можно запустить ее и
tasklist /m


Digitman   (2005-06-08 08:31:00) [13]


> ATarget


анализ таблицы импорта + эвристический анализ кода


Просто Джо   (2005-06-08 02:52:00) [14]

Хотя, не стану утверждать с уверенностью -- сам никогда не копал.


Просто Джо   (2005-06-08 02:30:00) [15]

Кхм. Это еще надо было постараться, чтобы в 3Мб 3(!) часа строку искать...

А по теме. Ищи в сети описание PE-заголовка исполнимых модулей. В заголовке будет ссылка на таблицу импорта. Она-то тебе и нужна, собственно.


Наверх

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