EXE (DOS,WINDOWS (NE,PE,LE),OS/2(LX))(EXE.rfi):
Class: Executable and Object, Status: Almost Complete, Last change: 29.09.2000 20:05:10

SET ENCODING OEM

const
  MZ=0x5a4d;
data

0 word wSignature   %5a4dH .EXE file signature ('MZ')

%$IF wSignature=MZ;

type
  TPtr struc
    word Ofs
    word Seg
  ends

  PReloTbl ^TReloTbl near
  PEXEImage ^TEXEImage *16 near=word

// PNewHdr ^TNewHdr near=ulong

  PIMAGE_DOS_HEADER ^IMAGE_DOS_HEADER;
  IMAGE_DOS_HEADER struc      %{ DOS .EXE header }
    word wPartPage    %length of partial page at end (generally ignored)
    word wPageCnt     %length of image in 512-byte pages, incl. header
    word wReloCnt     %number of items in relocation table
    PEXEImage wHdrSize     %size of header in 16-byte paragraphs
%    word wHdrSize     %size of header in 16-byte paragraphs
    word wMinAlloc    %minimum RAM needed above end of prog (paragraphs)
    word wMaxAlloc    %maximum RAM needed above end of prog (paragraphs)
    word wInitSS      %segment offset of stack segment (for setting SS)
    word wInitSP      %value for SP register when started
    word wChkSum      %file checksum (negative sum of all words in file)
    word wInitIP      %value for IP register when started
    word wInitCS      %segment offset of code segment (for setting CS)
    PReloTbl wTablOff     %file-offset of first relo item (often 001cH)
    word wOverlayNo   %overlay number (0 for base module)
    case @.wTablOff >= 0x40 of
      1: struc
        array[4] of Word Rsrv1
        Word OEM_ID
        Word OEM_Info
        array[10] of Word Rsrv1
       //PNewHdr NewHdr
        ulong NewHdr
       ends
    endc Rest
  ends

data
0002 IMAGE_DOS_HEADER Hdr

const
  NewHdrOfs = Hdr.Rest.1.NewHdr exc 0x10000000;

type
  TReloTbl array[Hdr.wReloCnt] of TPtr
  TEXEImage raw[(((Hdr.wPageCnt-1)*512+Hdr.wPartPage)
    min NewHdrOfs)-
    Hdr.wHdrSize*16]

%$IF Hdr.wTablOff >= 0x40;

SET ENCODING ANSI

type
TNewSign enum word (NE = 0x454E, LE = 0x454c, LX = 0x584c, PE = 0x4550)

data
NewHdrOfs TNewSign wNewSignature   % .EXE file signature ('NE','PE','LE')

%$IF wNewSignature=TNewSign.LE;

include LE.RFI

%$ELSIF wNewSignature=TNewSign.NE;

include NE.RFI

%$ELSIF wNewSignature=TNewSign.PE;
data
NewHdrOfs+2 word PEz
assert PEz=0;

type
TIMAGE_HEADERS forward

data
NewHdrOfs+4 TIMAGE_HEADERS COFFHdr

include COFF.RFI

%$END TNewSign.LE

%$END wTablOff

%$END MZ


Other specifications.


FlexT home page, Author`s home page.