summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@delorie.com>2000-06-30 21:54:03 +0000
committerDJ Delorie <dj@delorie.com>2000-06-30 21:54:03 +0000
commitbc74177ca5679d034e0eccdbe10acc3ba855ba50 (patch)
tree01b309720fe3b39275ef13f34ca9f51f18e6cefd
parentf58b346f7c5bbc81cc657263153b9e8ff788c6cc (diff)
downloadbinutils-redhat-bc74177ca5679d034e0eccdbe10acc3ba855ba50.tar.gz
* peicode.h (coff_swap_filehdr_in): can't use e_magic because we
can't assume the PE header is at 0x80. * coff/pe.h: clarify a comment
-rw-r--r--bfd/peicode.h5
-rw-r--r--include/ChangeLog4
-rw-r--r--include/coff/pe.h8
3 files changed, 15 insertions, 2 deletions
diff --git a/bfd/peicode.h b/bfd/peicode.h
index 8f64453a3f..9071c72b29 100644
--- a/bfd/peicode.h
+++ b/bfd/peicode.h
@@ -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. */
diff --git a/include/ChangeLog b/include/ChangeLog
index 2440179b23..29c27d1269 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -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.
diff --git a/include/coff/pe.h b/include/coff/pe.h
index e65562eee8..9b7f1f20cf 100644
--- a/include/coff/pe.h
+++ b/include/coff/pe.h
@@ -110,7 +110,7 @@
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 */