From 0bf8e580c9d8ffa8fa4ef11bfbf7594d7984a7b9 Mon Sep 17 00:00:00 2001 From: tkchia Date: Wed, 28 Sep 2022 17:07:25 +0000 Subject: [PATCH] Make ape.S shell script magic less prone to accidental breakage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The metal boot sector code was wrapped in a single-quoted string, like so: MZqFpD=' ...MZ HEADER... ...E_LFANEW... ...BIOS BOOT SECTOR...' This might break the shell code loader if the boot sector code contains a 0x27 (single quote) byte. This patch wraps the boot sector code in a here-document instead: MZqFpD=' ...MZ HEADER...' <<'@' ...E_LFANEW... ...BIOS BOOT SECTOR... @ This is harder to break — when interpreted as a shell script, the code can only accidentally terminate the here-document if there is a "\n@\n" sequence inside the BIOS boot portion. --- ape/ape.S | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ape/ape.S b/ape/ape.S index aada551aa..13546b444 100644 --- a/ape/ape.S +++ b/ape/ape.S @@ -125,6 +125,7 @@ ape_mz: .asciz "MZqFpD='\n" # Mark 'Zibo' Joseph Zbikowski .org 0x24 # MZ: bytes reserved for you .ascii "JT" # MZ: OEM identifier .short 0 # MZ: OEM information + .ascii "' <<'@'\n" .org 0x40-4 # MZ: bytes reserved for you #if SupportsWindows() || SupportsMetal() .long RVA(ape_pe) # PE: the new technology @@ -549,7 +550,7 @@ ape_disk: the bourne executable & linkable format */ #if SupportsWindows() || SupportsMetal() || SupportsXnu() -apesh: .ascii "'\n#'\"\n" # sixth edition shebang +apesh: .ascii "\n@\n#'\"\n" # sixth edition shebang // Until all operating systems can be updated to support APE, // we have a beautiful, yet imperfect workaround, which is to // modify the binary to follow the local system's convention.