Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Определить тип EXE-файла 2

Delphi , Программа и Интерфейс , EXE файл

Определить тип EXE-файла 2

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

 type
   TExeType = (etUnknown, etDOS, etWinNE {16-bit}, etWinPE {32-bit});

 function GetExeType(const FileName: string): TExeType;
 { func to return the type of executable or dll (DOS, 16-bit, 32-bit). }
 (**************************************************************
 Usage:
   with OpenDialog1 do
     if Execute then
       begin
         Label1.Caption := FileName;
         Label2.Caption := ExeStrings[GetExetype(FileName)];
       end;

   - or -

   case GetExeType(OpenDialog1.FileName) of
     etUnknown: Label3.Caption := 'Unknown file type';
     etDOS    : Label3.Caption := 'DOS executable';
     etWinNE  : {16-bit} Label3.Caption := 'Windows 16-bit executable';
     etWinPE  : {32-bit} Label3.Caption := 'Windows 32-bit executable';
   end;
 ***************************************************************)
 var
   Signature,
   WinHdrOffset: Word;
   fexe: TFileStream;
 begin
   Result := etUnknown;
   try
     fexe := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
     try
       fexe.ReadBuffer(Signature, SizeOf(Signature));
       if Signature = $5A4D { 'MZ' } then
         begin
           Result := etDOS;
           fexe.Seek($18, soFromBeginning);
           fexe.ReadBuffer(WinHdrOffset, SizeOf(WinHdrOffset));
           if WinHdrOffset >= $40 then
             begin
               fexe.Seek($3C, soFromBeginning);
               fexe.ReadBuffer(WinHdrOffset, SizeOf(WinHdrOffset));
               fexe.Seek(WinHdrOffset, soFrombeginning);
               fexe.ReadBuffer(Signature, SizeOf(Signature));
               if Signature = $454E { 'NE' } then
                 Result := etWinNE
               else
                 if Signature = $4550 { 'PE' } then
                   Result := etWinPE;
             end;
         end;
     finally
       fexe.Free;
     end;
   except
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   if OpenDialog1.Execute then
     case GetExeType(OpenDialog1.FileName) of
       etUnknown: Label_ExeType.Caption := 'Unknown file type';
       etDOS    : Label_ExeType.Caption := 'DOS executable';
       etWinNE  : Label_ExeType.Caption := 'Windows 16-bit executable';
       etWinPE  : Label_ExeType.Caption := 'Windows 32-bit executable';
     end;
 end;

Программный код на Delphi определяет тип исполняемого файла (DOS, Windows 16-разрядный или Windows 32-разрядный) на основе его сигнатуры.

Описание работы функции:

  1. Функция принимает имя файла в качестве входного параметра и initializes результат в etUnknown.
  2. Создается объект TFileStream для чтения файла.
  3. Читается первый байт (сигнатура) из файла, который должен быть либо 'MZ' (DOS-исполняемый файл), либо 'NE' (Windows 16-разрядный исполняемый файл), либо 'PE' (Windows 32-разрядный исполняемый файл).
  4. Если сигнатура равна 'MZ', результат устанавливается в etDOS. Затем функция перемещается к offset $18 в файле и читает еще один слово (WinHdrOffset). Если это значение равно или больше $40, то файл имеет заголовок Windows. Функция затем перемещается к offset, хранящемуся в WinHdrOffset, и читает сигнатуру снова. Если сигнатура равна 'NE', результат устанавливается в etWinNE; если 'PE', результат устанавливается в etWinPE.
  5. Функция возвращает тип, определенный для исполняемого файла.

Процедура Button1Click демонстрирует использование этой функции в приложении с графическим интерфейсом. Она открывает диалоговое окно выбора файла и выполняет его. Затем, основываясь на типе файла (DOS, Windows 16-разрядный или Windows 32-разрядный), она устанавливает заголовок для метки.

Примечания:

  • Код предполагает, что файл является валидным исполняемым файлом с корректной сигнатурой.
  • Код не обрабатывает ошибки надежно; если возникает ошибка при чтении файла, функция вернет etUnknown.
  • Это код специфичен для Delphi и может не работать на других языках программирования или платформах.

В целом, этот код предоставляет простой способ определить тип исполняемого файла на основе его сигнатуры. Однако для более сложных или надежных проверок вы можете захотеть использовать более sophisticate методы, такие как разбор заголовка PE (для Windows-исполняемых файлов) или анализировать структуру и содержимое файла более тщательно.

Определение типа EXE-файла с помощью Delphi-скрипта, позволяющего определить тип файла (DOS, 16-bit Windows или 32-bit Windows) на основе его сигнатуры.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: EXE файл ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-06-02 10:20:12
2024-07-27 07:42:07/0.0033252239227295/0