![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ImportTable [D6, WinXP]
Gost1 © (2004-05-12 12:46:00)
type
PImageImportByName = ^TImageImportByName;
_IMAGE_IMPORT_BY_NAME=packed record
HInst: Word;
Name: Byte;
end;
TImageImportByName =_IMAGE_IMPORT_BY_NAME;
TThunk=packed record
case Integer of
0: (ForwarderString: PByte);
1: (thFunction: PDWORD);
2: (Ordinal: DWORD);
3: (AddressOfData: PImageImportByName);
end;
PImageThunkData=^TImageThunkData;
_IMAGE_THUNK_DATA=packed record
Thunk: TThunk;
end;
TImageThunkData=_IMAGE_THUNK_DATA;
IMAGE_THUNK_DATA=_IMAGE_THUNK_DATA;
PImport := PImageImportDescriptor(DWord(PEHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress) + DWord(ImageBase));
while (PImport.Name > 0) do begin
модули тут перебираются все ок!
lstrcpyn(PChar(@buf), PChar(PImport.Name + ImageBase), 15);
MessageBox(0, PChar(@buf), '', MB_OK);
pThunk := PImageThunkData(ImageBase + DWord(PImport.FirstThunk));
while (pThunk.Thunk.thFunction <> nil) do begin
скорее всего неверно - тут, как получить смешение на имя импортируемой ф-ии?
pImpName := PImageImportByName(DWord(pThunk.Thunk.AddressOfData) + ImageBase);
lstrcpyn(PChar(@buf), PChar(pImpName.Name + ImageBase), 8);
MessageBox(0, PChar(@buf), '', MB_OK);
inc(pThunk);
end;
inc(PImport);
end; {while name}
Поглядите, плзз на код. Я хочу перечислить все импортируемые ф-ии. Получаю указатель на PImageThunkData, потом в цикле до нулевой секции на PImageImportByName, но вот тут скорее всего и есть оишибка, как правильно получить этот указатель? Используемые record'ы приведены!
Digitman (2004-05-12 13:27:00) [1]после того как в ран-тайм импортируемый модуль был загружен и присоединен к импортирующему модулю, значение поля pThunk.Thunk.thFunction содержит не ссылку на имя имп.ф-ции (или ее ординал), а VA точки входа в саму ф-цию ... т.е. ссылка на имя/ординал импортируемой ф-ции теряется (затирается вычисленным реальным значением ее точки входа)