Главная страница
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
4-1078346506
Talla2k
2004-03-03 23:41
2004.05.02
Services!!!


7-1078859629
Riant
2004-03-09 22:13
2004.05.02
Как отключить некоторые клавиши и их комбинации в Win XP?


1-1082103917
RH
2004-04-16 12:25
2004.05.02
Содержимое каталога


3-1081408036
van20
2004-04-08 11:07
2004.05.02
Как работать с защищенной паролем БД Paradox через ADO?


14-1081681121
uw
2004-04-11 14:58
2004.05.02
«Страсти Христовы»