Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.032 c
4-1076521958
JustAnotherDummy
2004-02-11 20:52
2004.04.18
RichEdit на WinAPI


11-1062289870
Serega123
2003-08-31 04:31
2004.04.18
По поводу замены sys... .dcu


14-1080044979
Digitman
2004-03-23 15:29
2004.04.18
Занимательное-познавательное из куриного мира


7-1076352679
SAmoilov
2004-02-09 21:51
2004.04.18
Обращение к дисководу и CD-ROM


1-1081002685
ss300
2004-04-03 18:31
2004.04.18
Install Shield





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский