Patch to fix core dumps displaying contents of a PE DLL.

Nick Clifton nickc@cygnus.com
Thu Nov 18 04:38:00 GMT 1999


Hi Guys,

  The patch below fixes a couple of segmentation faults that can occur
  when using objdump to display the contents of a PE format DLL.  The
  code was forgetting to inclue the value of ImageBase in its
  computation of the adjustment to be applied when extracting data
  from the DLL.

  Is this patch OK to apply ?

Cheers
	Nick


1999-11-18  Nick Clifton  <nickc@cygnus.com>

	* peigen.c (pe_print_idata): Include ImageBase in adjustment.
	(pe_print_edata): Include ImageBase in adjustment.

Index: peigen.c
===================================================================
RCS file: /cvs/binutils/binutils/bfd/peigen.c,v
retrieving revision 1.6
diff -p -r1.6 peigen.c
*** peigen.c	1999/09/12 00:45:26	1.6
--- peigen.c	1999/11/18 12:34:51
*************** pe_print_idata (abfd, vfile)
*** 1114,1120 ****
    if (! bfd_get_section_contents (abfd, section, (PTR) data, 0, secsize))
      return false;
  
!   adj = - section->vma;
  
    for (i = 0; i < datasize; i += onaline)
      {
--- 1114,1120 ----
    if (! bfd_get_section_contents (abfd, section, (PTR) data, 0, secsize))
      return false;
  
!   adj = (extra->ImageBase - section->vma) & 0xffffffff;
  
    for (i = 0; i < datasize; i += onaline)
      {
*************** pe_print_idata (abfd, vfile)
*** 1153,1160 ****
        if (hint_addr == 0 && first_thunk == 0)
  	break;
  
!       dll = (char *) data + dll_name - section->vma + dataoff;
!       fprintf(file, _("\n\tDLL Name: %s\n"), dll);
  
        if (hint_addr != 0)
  	{
--- 1153,1160 ----
        if (hint_addr == 0 && first_thunk == 0)
  	break;
  
!       dll = (char *) data + dll_name + adj;
!       fprintf (file, _("\n\tDLL Name: %s\n"), dll);
  
        if (hint_addr != 0)
  	{
*************** pe_print_edata (abfd, vfile)
*** 1348,1354 ****
    edt.npt_addr       = bfd_get_32(abfd, data+32);
    edt.ot_addr        = bfd_get_32(abfd, data+36);
  
!   adj = - (section->vma + dataoff);
  
    /* Dump the EDT first first */
    fprintf(file,
--- 1348,1354 ----
    edt.npt_addr       = bfd_get_32(abfd, data+32);
    edt.ot_addr        = bfd_get_32(abfd, data+36);
  
!   adj = (extra->ImageBase - (section->vma + dataoff)) & 0xffffffff;
  
    /* Dump the EDT first first */
    fprintf(file,


More information about the Binutils mailing list