summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2016-03-31 09:27:38 +0200
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2016-04-18 10:18:14 +0200
commita8c39ba2986c1ffb1dab864cefedc86402a9695c (patch)
tree9b2ed9de7f5c5105481601b02eb4e992693a474b
parent60cfeeb3b656e746f98620cb99a971ee6310b028 (diff)
downloadedk2-a8c39ba2986c1ffb1dab864cefedc86402a9695c.tar.gz
edk2-a8c39ba2986c1ffb1dab864cefedc86402a9695c.tar.bz2
edk2-a8c39ba2986c1ffb1dab864cefedc86402a9695c.zip
ArmPlatformPkg/DS-5: fix 64-bit PE/COFF header parsing bug
The 64-bit version of the DS-5 debug script that retrieves the debug file path from the PE/COFF image in memory assumes that the PE/COFF header is packed, and that the debug directory entry in the optional header appears at a fixed offset into the file. This is no longer true, now that we pad between the file header and the PE header if the section alignment exceeds the size of the header (which may be the case when the module contains a vector table or small model code, which requires 2 KB or 4 KB section alignment, respectively), to allow this padding to be emitted if the image is subsequently converted to TE format. So replace the fixed offset with a dereference of the appropriate header field. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reported-by: Vladimir Olovyannikov <vladimir.olovyannikov@broadcom.com>
-rw-r--r--ArmPlatformPkg/Scripts/Ds5/firmware_volume.py5
1 files changed, 2 insertions, 3 deletions
diff --git a/ArmPlatformPkg/Scripts/Ds5/firmware_volume.py b/ArmPlatformPkg/Scripts/Ds5/firmware_volume.py
index c434e3de19..9a76ae066d 100644
--- a/ArmPlatformPkg/Scripts/Ds5/firmware_volume.py
+++ b/ArmPlatformPkg/Scripts/Ds5/firmware_volume.py
@@ -138,11 +138,10 @@ class EfiSectionPE64:
def get_debug_filepath(self):
# Offset from dos hdr to PE file hdr (EFI_IMAGE_NT_HEADERS64)
- #file_header_offset = self.ec.getMemoryService().readMemory32(self.base_pe64 + 0x3C)
- file_header_offset = 0x0
+ file_header_offset = self.ec.getMemoryService().readMemory32(self.base_pe64 + 0x3C)
# Offset to debug dir in PE hdrs
- debug_dir_entry_rva = self.ec.getMemoryService().readMemory32(self.base_pe64 + file_header_offset + 0x138)
+ debug_dir_entry_rva = self.ec.getMemoryService().readMemory32(self.base_pe64 + file_header_offset + 0xB8)
if debug_dir_entry_rva == 0:
raise Exception("EfiFileSectionPE64","No Debug Directory")