Главная страница
    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.03 c
4-1076139499
}{enon
2004-02-07 10:38
2004.04.18
Как найти обновляемый регон?


6-1076337166
StasIK
2004-02-09 17:32
2004.04.18
Помогите закрыть доступ в инет


1-1080721314
Anna
2004-03-31 12:21
2004.04.18
Ревкция DBgrida на колесико мыши


11-1063290916
Igit
2003-09-11 18:35
2004.04.18
Не собирается в .dpr


3-1079809775
DIS
2004-03-20 22:09
2004.04.18
таблица (Paradox)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский