From e587a7691b8603a89f55a57f78dae5e20fdbf5d1 Mon Sep 17 00:00:00 2001 From: Kevin Parsons Date: Tue, 17 Jan 2023 08:02:17 +0000 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 Change-Id: I8c5966b65c72b2474b771b85aaadb61cad9f5be6 GitHub-Last-Rev: c715ad290a01218a1320834e519125e7a5f94384 GitHub-Pull-Request: golang/go#57835 Reviewed-on: https://go-review.googlesource.com/c/go/+/462054 TryBot-Result: Gopher Robot Reviewed-by: Bryan Mills Run-TryBot: Quim Muntal Reviewed-by: Cherry Mui Reviewed-by: Quim Muntal --- src/cmd/link/internal/ld/pe.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cmd/link/internal/ld/pe.go b/src/cmd/link/internal/ld/pe.go index 0e291311a0..10c1dc4ab3 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,9 +160,9 @@ var dosstub = []uint8{ 0x00, 0x03, 0x00, - 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, -- 2.50.0