2007. augusztus 7., kedd
Determine the type of an EXE file
Problem/Question/Abstract:
Determine the type of an EXE file
Answer:
Here's a function to return the platform the executable was designed for (16/32 bit Windows or DOS). Read the comment for the usage. This function works as well with DLLs, COMs, and maybe others. Thanks to Peter Below for this code.
Use it as shown at the bottom of the code snippet.
//-------------------------------------------------------------------------
// function to return the type of executable or dll (DOS, 16-bit, 32-bit).
//-------------------------------------------------------------------------
type
TExeType = (etUnknown, etDOS, etWinNE {16-bit}, etWinPE {32-bit});
function GetExeType(const FileName: string): TExeType;
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;
begin
case GetExeType(aFileName) 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;
end;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése