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

Вниз

Вопрос по РЕ формату   Найти похожие ветки 

 
SPeller ©   (2004-02-18 14:50) [0]

Подскажите пожалуйста, каково назначение каталогов данных DELAY_IMPORT и BOUND_IMPORT ?


 
MBo ©   (2004-02-18 15:25) [1]

про DELAY_IMPORT  - у Рихтера немного написано об отложенной загрузке.


 
AKul ©   (2004-02-18 15:58) [2]


> SPeller ©   (18.02.04 14:50)  

DELAY_IMPORT - содержит данные для отложенной загрузки DLL, т.е. библиотеки не загружается и не линкуется при загрузке екзешника, а подключается только при первом вызове ее функции.

BOUND_IMPORT - хранятся "правильные" адреса импортируемых функций, т.е. линковка не требуется - DLL загружается в адресное пространство, а адреса импортируемых функций уже известны. Само собой базовый адрес DLL (да и RVA ее экспортируемых функций...) должен быть таким же, как при составлении BoundImport"а (для этих целей хранятся временные штампы DLL).

P.S. Прошу прощения, если я что-то подзабыл...


 
SPeller ©   (2004-02-19 05:42) [3]

Большое спасибо! Всё понял.


 
SPeller ©   (2004-02-21 12:13) [4]

Параллельный вопрос:
Есть файлы досовского формата, которые тоже начинаются с MZ, но попытка узнать тип файла не удаётся - данные в поле TImageDosHeader._lfanew оказываются мягко говоря, не теми какие нужны. Как отличить такой файл от других? РЕ, NE и подобные хоть определяются таким же способок как и PE.


 
SPeller ©   (2004-02-21 12:16) [5]

Может есть ограничения на длину DOS-stub, чтобы если этот лимит превышен в поле _lfanew, то сразу знать что формат файла не тот какой нужен?


 
Игорь Шевченко ©   (2004-02-21 12:40) [6]

{
  Модуль: HSImageUtils

  Описание: Набор утилит для работы с исполняемыми файлами.

  Автор: Игорь Шевченко

  Дата создания: 22.02.2003

  История изменений:
}
unit HSImageUtils;

interface

type
 THSBinaryType = (hsbtError, hsbtWin32, hsbtWin16, hsbtDos16, hsbtCom,
                  hsbtVxd, hsbtW3, hsBtUnknown);

function HSGetBinaryType (const FileName : String) : THSBinaryType;
function HSBinaryTypeToString (Value : THSBinaryType) : String;

implementation
uses
 Windows, SysUtils, HSFileMapper;

const
 HSBinaryTypeStrings : array[THSBinaryType] of String = (
   "Error", "Win32", "Win16", "MSDOS", "COM", "VxD", "W3", "Unknown"
 );
 IMAGE_W3_SIGNATURE                     = $3357;      { W3 }

function HSGetBinaryType (const FileName : String) : THSBinaryType;
type
 PIMAGE_DOS_HEADER = ^IMAGE_DOS_HEADER;
 PIMAGE_NT_HEADERS = PImageNtHeaders;
var
 Mapper : THSFileMapper;
 DosHeader : PIMAGE_DOS_HEADER;
 FileHeader : PIMAGE_NT_HEADERS;
begin
 Result := hsbtError;
 Mapper := THSFileMapper.Create (FileName);
 try
   if (Mapper.Map[0] <> "M") or (Mapper.Map[1] <> "Z") then begin
     if UpperCase(ExtractFileExt(FileName)) = ".COM" then
       Result := hsbtCom;
     Exit;
   end else if Mapper.FileSize >= SizeOf(IMAGE_DOS_HEADER) then begin
     DosHeader := PIMAGE_DOS_HEADER(Mapper.Map);
     if (DosHeader^._lfanew > $40) { Matt Pietrek } and
        (DWORD(DosHeader^._lfanew) < Mapper.FileSize - SizeOf(WORD)) then begin
       FileHeader := PIMAGE_NT_HEADERS(DWORD(DosHeader) +
                                       DWORD(DosHeader^._lfanew));
       if FileHeader^.Signature = IMAGE_NT_SIGNATURE then
         Result := hsbtWin32
       else if WORD(FileHeader^.Signature) = IMAGE_OS2_SIGNATURE then
         Result := hsbtWin16
       else if WORD(FileHeader^.Signature) = IMAGE_VXD_SIGNATURE then
         Result := hsbtVxd
       else if WORD(FileHeader^.Signature) = IMAGE_W3_SIGNATURE then
         Result := hsbtW3
       else
         Result := hsbtUnknown;
     end else
       Result := hsbtDos16;
   end;
 finally
   Mapper.Free();
 end;
end;

function HSBinaryTypeToString (Value : THSBinaryType) : String;
begin
 Result := HSBinaryTypeStrings[Value];
end;

end.


 
SPeller ©   (2004-02-21 15:32) [7]

Спасибо! :)



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

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

Наверх




Память: 0.49 MB
Время: 0.041 c
1-1080648330
Я Ламер
2004-03-30 16:05
2004.04.18
OleVariant


6-1076759478
Opilki_Inside
2004-02-14 14:51
2004.04.18
Не могу найти статью


6-1077106041
atruhinov
2004-02-18 15:07
2004.04.18
Прием/Передача данных через адаптер


3-1079606356
SnapIn
2004-03-18 13:39
2004.04.18
Как увидеть данные из .ORA


1-1080403405
TankMan
2004-03-27 19:03
2004.04.18
Много вопросов по компонентостроительству....