From c715ad290a01218a1320834e519125e7a5f94384 Mon Sep 17 00:00:00 2001 From: Kevin Parsons Date: Sun, 1 Jan 2023 11:04:25 -0800 Subject: [PATCH] cmd/link: fix incorrect DOS header on Windows binaries The previous DOS header placed on Windows binaries was incorrect, as it had e_crlc (number of relocations) set to 4, instead of e_cparhdr (size of header in 16-bit words) set to 4. This resulted in execution starting at the beginning of the file, instead of where the DOS stub code actually exists. Fixes #57834 --- src/cmd/link/internal/ld/pe.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cmd/link/internal/ld/pe.go b/src/cmd/link/internal/ld/pe.go index 0e291311a0a..10c1dc4ab3e 100644 --- a/src/cmd/link/internal/ld/pe.go +++ b/src/cmd/link/internal/ld/pe.go @@ -152,6 +152,7 @@ const ( // DOS stub that prints out // "This program cannot be run in DOS mode." +// See IMAGE_DOS_HEADER in the Windows SDK for the format of the header used here. var dosstub = []uint8{ 0x4d, 0x5a, @@ -159,12 +160,12 @@ var dosstub = []uint8{ 0x00, 0x03, 0x00, + 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, - 0x00, 0xff, 0xff, 0x00,