* peXXigen.c (pe_print_edata): Compute the size of the export table from the

size field in the DataDictionary and not the size of the section.  Some
  linkers embed the export table inside a larger section.
This commit is contained in:
Nick Clifton
2005-07-29 14:07:01 +00:00
parent 0a7b9ba605
commit 0facbdf5c2
2 changed files with 20 additions and 9 deletions

View File

@ -1,3 +1,10 @@
2005-07-29 Pavel Kankovsky <peak@argo.troja.mff.cuni.cz>
* peXXigen.c (pe_print_edata): Compute the size of the export
table from the size field in the DataDictionary and not the size
of the section. Some linkers embed the export table inside a
larger section.
2005-07-29 Alan Modra <amodra@bigpond.net.au> 2005-07-29 Alan Modra <amodra@bigpond.net.au>
* elf-bfd.h (struct elf_backend_data): Add action_discarded. * elf-bfd.h (struct elf_backend_data): Add action_discarded.

View File

@ -1346,6 +1346,7 @@ pe_print_edata (bfd * abfd, void * vfile)
return TRUE; return TRUE;
addr = section->vma; addr = section->vma;
dataoff = 0;
datasize = section->size; datasize = section->size;
if (datasize == 0) if (datasize == 0)
return TRUE; return TRUE;
@ -1355,12 +1356,8 @@ pe_print_edata (bfd * abfd, void * vfile)
addr += extra->ImageBase; addr += extra->ImageBase;
for (section = abfd->sections; section != NULL; section = section->next) for (section = abfd->sections; section != NULL; section = section->next)
{ if (addr >= section->vma && addr < section->vma + section->size)
datasize = section->size;
if (addr >= section->vma && addr < section->vma + datasize)
break; break;
}
if (section == NULL) if (section == NULL)
{ {
@ -1368,14 +1365,21 @@ pe_print_edata (bfd * abfd, void * vfile)
_("\nThere is an export table, but the section containing it could not be found\n")); _("\nThere is an export table, but the section containing it could not be found\n"));
return TRUE; return TRUE;
} }
dataoff = addr - section->vma;
datasize = extra->DataDirectory[0].Size;
if (datasize > section->size - dataoff)
{
fprintf (file,
_("\nThere is an export table in %s, but it does not fit into that section\n"),
section->name);
return TRUE;
}
} }
fprintf (file, _("\nThere is an export table in %s at 0x%lx\n"), fprintf (file, _("\nThere is an export table in %s at 0x%lx\n"),
section->name, (unsigned long) addr); section->name, (unsigned long) addr);
dataoff = addr - section->vma;
datasize -= dataoff;
data = bfd_malloc (datasize); data = bfd_malloc (datasize);
if (data == NULL) if (data == NULL)
return FALSE; return FALSE;