Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизИмпортированыые функции 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.025 c