Форум: "Система";
Текущий архив: 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