W 'windows.pas' masz gotowe rekordy do nagłówków MZ i NE:
TImageDosHeader - MZ
TImageOptionalHeader - NE
Chociaz NE nie bedzie ci chyba potrzebny tylko PE (delphi właśnie takie nagłówki tworzy). 4 bajty pod adresem 3Ch (liczac od poczatku pliku) to adres do nagłówka PE. Potem liczac od początku PE, 4 bajty pod adresem 2Fh to crc.
Możesz też zapisać coś do nagłówka MZ bo zawiera on 8 + 20 bajtów zarezerwowanych poczynając od adresu 1Ch (8 bajtów) i chyba 20h (20 bajtów). Chyba nie są używane... sam tam zapisywałem jakiś tekst i program chodził bezbłędnie :)
Tak w ogóle to polecam zajrzeć do specyfikacji, tam jest wszytko dokładnie opisane.
Podam przykład jak odczytać CRC z nagłówka PE:
var
H: TImageDosHeader;
CRC: DWord;
F: file of byte;
begin
AssignFile(F, 'c:\plik.exe');
try
Reset(F);
BlockRead(F, H, SizeOf(H));
if H._lfanew <> 0 then
begin
Seek(F, H._lfanew + $2F);
BlockRead(F, CRC, SizeOf(CRC));
{ ...i tu juz masz CRC w }
end;
finally
CloseFile(F);
end;
end;