]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/DS-5: fix 64-bit PE/COFF header parsing bug
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Thu, 31 Mar 2016 07:27:38 +0000 (09:27 +0200)
committerArd Biesheuvel <ard.biesheuvel@linaro.org>
Mon, 18 Apr 2016 08:18:14 +0000 (10:18 +0200)
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>
ArmPlatformPkg/Scripts/Ds5/firmware_volume.py

index c434e3de19da766053c32e9077999fcf3dc011ea..9a76ae066d9a86cb8b38b0f24098c978f6123436 100644 (file)
@@ -138,11 +138,10 @@ class EfiSectionPE64:
 \r
     def get_debug_filepath(self):\r
         # Offset from dos hdr to PE file hdr (EFI_IMAGE_NT_HEADERS64)\r
-        #file_header_offset = self.ec.getMemoryService().readMemory32(self.base_pe64 + 0x3C)\r
-        file_header_offset = 0x0\r
+        file_header_offset = self.ec.getMemoryService().readMemory32(self.base_pe64 + 0x3C)\r
 \r
         # Offset to debug dir in PE hdrs\r
-        debug_dir_entry_rva = self.ec.getMemoryService().readMemory32(self.base_pe64 + file_header_offset + 0x138)\r
+        debug_dir_entry_rva = self.ec.getMemoryService().readMemory32(self.base_pe64 + file_header_offset + 0xB8)\r
         if debug_dir_entry_rva == 0:\r
             raise Exception("EfiFileSectionPE64","No Debug Directory")\r
 \r