* peicode.h (coff_swap_filehdr_in): can't use e_magic because we
authorDJ Delorie <dj@redhat.com>
Fri, 30 Jun 2000 21:54:03 +0000 (21:54 +0000)
committerDJ Delorie <dj@redhat.com>
Fri, 30 Jun 2000 21:54:03 +0000 (21:54 +0000)
can't assume the PE header is at 0x80.
* coff/pe.h: clarify a comment

bfd/peicode.h
include/ChangeLog
include/coff/pe.h

index 8f64453..9071c72 100644 (file)
@@ -220,9 +220,14 @@ coff_swap_filehdr_in (abfd, src, dst)
      correctly for a PEI file, check the e_magic number here, and, if
      it doesn't match, clobber the f_magic number so that we don't get
      a false match.  */
+#if 0
+  /* We can't assume that the PE header is at offset 0x80.  When it
+     isn't, the DOS header isn't read correctly, so we can't assume
+     e_magic is set even for valid PE files. */
   if (bfd_h_get_16 (abfd, (bfd_byte *) filehdr_src->e_magic) != DOSMAGIC)
     filehdr_dst->f_magic = -1;
 #endif
+#endif
 
   /* Other people's tools sometimes generate headers with an nsyms but
      a zero symptr.  */
index 2440179..29c27d1 100644 (file)
@@ -1,3 +1,7 @@
+2000-06-30  DJ Delorie  <dj@cygnus.com>
+
+       * coff/pe.h: clarify a comment
+
 2000-06-18  Stephane Carrez  <stcarrez@worldnet.fr>
 
        * dis-asm.h (print_insn_m68hc12): Define.
index e65562e..9b7f1f2 100644 (file)
 
 struct external_PEI_filehdr
 {
-  /* DOS header fields */
+  /* DOS header fields - always at offset zero in the EXE file */
   char e_magic[2];             /* Magic number, 0x5a4d */
   char e_cblp[2];              /* Bytes on last page of file, 0x90 */
   char e_cp[2];                        /* Pages in file, 0x3 */
@@ -129,8 +129,12 @@ struct external_PEI_filehdr
   char e_oemid[2];             /* OEM identifier (for e_oeminfo), 0x0 */
   char e_oeminfo[2];           /* OEM information; e_oemid specific, 0x0 */
   char e_res2[10][2];          /* Reserved words, all 0x0 */
-  char e_lfanew[4];            /* File address of new exe header, 0x80 */
+  char e_lfanew[4];            /* File address of new exe header, usually 0x80 */
   char dos_message[16][4];     /* other stuff, always follow DOS header */
+
+  /* Note: additional bytes may be inserted before the signature.  Use
+   the e_lfanew field to find the actual location of the NT signature */
+
   char nt_signature[4];                /* required NT signature, 0x4550 */ 
 
   /* From standard header */