[PATCH] D22750: Do not ignore SizeOfOptionalHeader in COFF header even if PE header is not present.

Marek Milkovič via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 25 04:38:29 PDT 2016


milkovic created this revision.
milkovic added a reviewer: ruiu.
milkovic added a subscriber: llvm-commits.

Attribute `SizeOfOptionalHeader` is ignored if no PE header is present in the file. This attribute should be ignored according to standard, however there are uses of this field even though it should not be used.

This change does not conform to PE/COFF standard, but there are several COFF files without PE header, where you had to add up `SizeOfOptionalHeader` in order to get proper section headers. Other tools and their own parsers do take this into account.

https://reviews.llvm.org/D22750

Files:
  COFFObjectFile.cpp

Index: COFFObjectFile.cpp
===================================================================
--- COFFObjectFile.cpp
+++ COFFObjectFile.cpp
@@ -716,9 +716,10 @@
     }
     if ((EC = getObject(DataDirectory, Data, DataDirAddr, DataDirSize)))
       return;
-    CurPtr += COFFHeader->SizeOfOptionalHeader;
   }
 
+  CurPtr += COFFHeader->SizeOfOptionalHeader;
+
   if ((EC = getObject(SectionTable, Data, base() + CurPtr,
                       (uint64_t)getNumberOfSections() * sizeof(coff_section))))
     return;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D22750.65330.patch
Type: text/x-patch
Size: 516 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160725/5c4f1147/attachment.bin>


More information about the llvm-commits mailing list