[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
BFD assumes ELF phdrs in core files are just after ELF header
From: |
Miloslav Trmac |
Subject: |
BFD assumes ELF phdrs in core files are just after ELF header |
Date: |
Fri, 15 Dec 2000 14:59:36 +0100 |
User-agent: |
Mutt/1.2.5i |
Hi,
BFD in binutils 2.10.1 (affects gdb 5.0 as well) assumes that program headers
in ELF core files immediatelly follow the ELF header. To reproduce, look at
the attached core file:
'readelf -a core' says:
Elf file type is CORE (Core file)
Entry point 0x0
There are 13 program headers, starting at offset 284
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
NOTE 0x000034 0x00000000 0x00000000 0x000e8 0x00000 0
LOAD 0x001000 0x00000000 0x00000000 0x00000 0x8048000 0
LOAD 0x001000 0x08048000 0x00000000 0x00000 0x05000 R E 0
LOAD 0x001000 0x0804d000 0x00000000 0x01000 0x01000 R E 0
LOAD 0x002000 0x0804e000 0x00000000 0x01000 0x01000 RWE 0
LOAD 0x003000 0xbf7c2000 0x00000000 0x00000 0x01000 R E 0
LOAD 0x003000 0xbf7c4000 0x00000000 0x00000 0x01000 R E 0
LOAD 0x003000 0xbf7c5000 0x00000000 0x400000 0x400000 RWE 0
LOAD 0x403000 0xbfbc5000 0x00000000 0x01000 0x01000 RWE 0
LOAD 0x404000 0xbfbc6000 0x00000000 0x400000 0x400000 RWE 0
LOAD 0x804000 0xbffc6000 0x00000000 0x00000 0x37000 R E 0
LOAD 0x804000 0xbfffd000 0x00000000 0x01000 0x01000 R E 0
LOAD 0x805000 0xbfffe000 0x00000000 0x02000 0x02000 RWE 0
but 'objdump -p core' says:
core: file format elf32-i386
Program Header:
SHLIB off 0x00000060 vaddr 0x00000001 paddr 0x45524f43 align 2**31
filesz 0x00000000 memsz 0x0000000e flags ---
LOAD off 0x00000000 vaddr 0x0000001b paddr 0x0000000e align 2**31
filesz 0x0000002c memsz 0xfffffff3 flags --- bf7c68c8
NULL off 0x00001000 vaddr 0xbf7c68c8 paddr 0x00000000 align 2**0
filesz 0xbffc5d44 memsz 0x0804c3a7 flags rw- 200
NULL off 0x0000002c vaddr 0x0000002a paddr 0x0000002a align 2**1
filesz 0x00000001 memsz 0x00000005 flags --- 60
0x45524f43 off 0x00000000 vaddr 0x00746163 paddr 0x00000000 align 2**0
filesz 0x00000000 memsz 0x00000000 flags -wx 20746160
NULL off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**0
filesz 0x00000000 memsz 0x00000000 flags ---
NULL off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**0
filesz 0x00000000 memsz 0x00000000 flags ---
NULL off 0x00000000 vaddr 0x00000004 paddr 0x00000034 align 2**0
filesz 0x00000000 memsz 0x00000000 flags --- e8
NULL off 0x00000000 vaddr 0x00000001 paddr 0x00001000 align 2**27
filesz 0x00000000 memsz 0x00000000 flags ---
NULL off 0x00000000 vaddr 0x00000001 paddr 0x00001000 align 2**14
filesz 0x08048000 memsz 0x00000000 flags ---
SHLIB off 0x00000000 vaddr 0x00000001 paddr 0x00001000 align 2**12
filesz 0x0804d000 memsz 0x00000000 flags --- 1000
SHLIB off 0x00000000 vaddr 0x00000001 paddr 0x00002000 align 2**12
filesz 0x0804e000 memsz 0x00000000 flags --- 1000
0x7 off 0x00000000 vaddr 0x00000001 paddr 0x00003000 align 2**12
filesz 0xbf7c2000 memsz 0x00000000 flags ---
This is completely bogus, and is made from the data directly following the
ELF header, which is in fact occupied by the note segment.
Possible fix (completely untested! - not even that it compiles):
----------------------------------------------------------------
--- elfcore.h.orig Fri Dec 15 14:54:50 2000
+++ elfcore.h Fri Dec 15 14:56:32 2000
@@ -193,6 +193,8 @@
elf_tdata (abfd)->phdr = i_phdrp;
+ if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0)
+ return NULL;
/* Read and convert to internal form. */
for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
{
----------------------------------------------------------------
Thanks.
Mirek
core.bz2
Description: core.bz2
- BFD assumes ELF phdrs in core files are just after ELF header,
Miloslav Trmac <=