Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Импортированыые функции EXE фаила ( PE формат)   Найти похожие ветки 

 
LDGuest   (2004-04-14 12:07) [0]

Ребята есть следующая проблема:
надо получить список всех функций, которые импортируються исполняемым фаилом из dll библиотек.
( я пишу программу анологичную tdump.exe )


 
Digitman ©   (2004-04-14 12:23) [1]

в случае только стат.импорта сканируй директорию импорта импортирующего модуля

во всех прочих случаях задача не имеет конечного решения


 
tesseract ©   (2004-04-14 12:30) [2]

Динамически линкуемую библиотеку можно определить Api-spy если запустить её с листом всех стандартных функций.


 
LDGuest   (2004-04-14 12:31) [3]

проблема в том что в некоторых модулях нет секции .idata, а
tdump.exe и отладчики показывают импортированные функции! млин!


 
Digitman ©   (2004-04-14 12:54) [4]

структура _IMAGE_OPTIONAL_HEADER содержит поле
DataDirectory: packed array[0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES-1] of TImageDataDirectory;

обращение к области первого дескриптора в директории импорта осущ-ся
pImpDir := PImageImportDescriptor(hImporter + pOptHdr^.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress)


 
Игорь Шевченко ©   (2004-04-14 14:48) [5]

LDGuest   (14.04.04 12:31)

procedure TPEImage.LoadImports;
var
 RawOffset: Integer;
 ImportDescriptor: PIMAGE_IMPORT_DESCRIPTOR;
 DllName: string;
 PFunctionsAddress: PDWORD;
 ImportAddress: DWORD;
begin
 with NtHeaders^.OptionalHeader.DataDirectory[
     IMAGE_DIRECTORY_ENTRY_IMPORT] do begin
   if (VirtualAddress = 0) or (Size = 0) then
     Exit;
   RawOffset := RawAddress(VirtualAddress);
 end;
 ImportDescriptor := PIMAGE_IMPORT_DESCRIPTOR(RawData + RawOffset);
 while ImportDescriptor^.Name <> 0 do begin
   RawOffset := RawAddress(ImportDescriptor^.Name);
   if RawOffset <> 0 then
     DllName := UpperCase(StrPas(RawData + RawOffset));
   if ImportDescriptor^.Characteristics = 0 then
     RawOffset := RawAddress(ImportDescriptor^.FirstThunk)
   else
     RawOffset := RawAddress(ImportDescriptor^.Characteristics);
   PFunctionsAddress := PDWORD(RawData + RawOffset);
   while PFunctionsAddress^ <> 0 do begin
     ImportAddress := PFunctionsAddress^;
     FImports.Add(GetImportedFunctionName(DllName, ImportAddress));
     Inc(PFunctionsAddress);
   end;
   Inc(ImportDescriptor);
 end;
end;

function TPEImage.GetImportedNameFromIATEntry(IATEntryRVA: DWORD;
 FullInfo: Boolean): string;
var
 RawOffset: DWORD;
begin
 RawOffset := RawAddress (IATEntryRVA);
 Result := StrPas(RawData + RawOffset + SizeOf(Word));
 if FullInfo then
   Result := Format("%s (Hint=%.4x)", [Result,
     PIMAGE_IMPORT_BY_NAME(RawData + RawOffset)^.Hint]);
end;

function TPEImage.RawAddress(VirtualAddress: Cardinal): Cardinal;
var
 I: Integer;
 Position: Cardinal;
begin
 Result := 0;
 for I := 0 to Pred(FSections.Count) do
   if (Sections[I].VirtualAddress <= VirtualAddress) and
      (VirtualAddress < Sections[I].VirtualAddress +
       Sections[I].SizeOfRawData) then begin
     Position := VirtualAddress - Sections[I].VirtualAddress;
     Result := Sections[I].PointerToRawData + Position;
     Break;
   end;
end;




Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
3-1080815585
LittleSpo
2004-04-01 14:33
2004.05.02
MIDAS + ADO где можно найти доки ?


1-1081878711
wall7
2004-04-13 21:51
2004.05.02
ActionList и MessageBox


1-1081851992
siriusP
2004-04-13 14:26
2004.05.02
Свойство типа объект в инспекторе объектов?


3-1081416944
Igorok
2004-04-08 13:35
2004.05.02
Иконки


14-1081191836
Yanis
2004-04-05 23:03
2004.05.02
У кого нибудь работает Soft ICE под WinXP?