┌──┌─┐┌──
──┘├─┘──┘ Presents
┐ ┌┐┐┌─┤ VMag, Issue 3, 1 January 1999
└─┘┘ ┘└─┘ ─────────────────────────────
Exe2Com (самостоятельная загрузка небольших exe-файлов).
или
На заметку анти/вирумэйкеру ;)
Заголовок exe-файла:
+0 2 Signature EXE-file signature ('MZ' or 'ZM').
See EXE.Txt (LMD #1'97).
+2 2 PartPage Length of partial page at end (generally ignored).
+4 2 PageCnt Length of image in 512-byte pages, incl. header.
+6 2 ReloCnt Number of items in relocation table.
+8 2 HdrSize Size of header in 16-byte paragraphs.
+0aH 2 MinAlloc Minimum RAM needed above end of prog (paragraphs).
+0cH 2 MaxAlloc Maximum RAM needed above end of prog (paragraphs).
+0eH 2 InitSS Segment offset of stack segment (for setting SS).
+10H 2 InitSP Value for SP register when started.
+12H 2 ChkSum File checksum (negative sum of all words in file).
+14H 2 InitIP Value for IP register when started.
+16H 2 InitCS Segment offset of code segment (for setting CS).
+18H 2 TablOff File-offset of first relo item (often 001cH).
+1aH 2 OverlayNo Overlay number (0 for base module).
28 Size of formatted portion of EXE header.
+? 4*? ReloTbl variable-length relocation table.
+? ? Filler filler to paragraph boundary.
+? ? Image start of program image.
Собственно загрузчик exe-файлов, используемый в Exe2Com, вынесен в
отдельный модуль Loader.Asm, имеющий длину кода 128 байт (8 параграфов),
который "вшивается" в начало обрабатываемого exe-файла. Естественно, что
длина полученного файла должна удовлетворять условиям com-файла (не надо
забывать про стек - я обычно отвожу 100h байт). Комментарии отсутствуют,
как, впрочем, всегда, но, думаю, разобраться большого труда не составит.
Начальные значения регистров для exe-файла не соблюдаются, кроме
регистров ds и es, устанавливаемых на PSP (вообще говоря, это плохо).
//Scout