LINUX.ORG.RU

Подскажите, есть ли утилитка, тестирующая файлы ELF, и говорящая, что там содержится и возможные ошибки...


0

0

В общем, я использую некий левый линкер, и он сообирает ELF executable, которые работоспособны на Red Hat 8, но когда я тащу их на RH7, при запуске происходит Segmentation fault. Readelf говорит: bad dynamic symbol, что именно не так, какой такой символ - непонятно... Может быть, есть более продвинутые средства тестирования?

anonymous

Кино для настоящих линуксоидов ;)

>Readelf говорит: bad dynamic symbol

дык библиотеки вероятно не совпадают

readelf -a {elf-file} чего говорит ?

sS ★★★★★
()
Ответ на: Кино для настоящих линуксоидов ;) от sS

Дык.... Как раз readelf -a {elffile} и говорит следующее:


Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  PHDR           0x000034 0x08048034 0x08048034 0x00240 0x00240 R   0x4
  INTERP         0x000274 0x08048274 0x08048274 0x00013 0x00013 R   0x1
      [Requesting program interpreter: /lib/ld-linux.so.2]
  LOAD           0x000000 0x08048000 0x08048000 0x00287 0x01000 R   0x1000
  LOAD           0x001000 0x08049000 0x08049000 0x0003b 0x01000 R E 0x1000
  LOAD           0x002000 0x0804a000 0x0804a000 0x00000 0x01000 RW  0x1000
  LOAD           0x002000 0x0804b000 0x0804b000 0x00010 0x01000 RW  0x1000
  LOAD           0x003000 0x0804c000 0x0804c000 0x00020 0x01000 R E 0x1000
  LOAD           0x004000 0x0804d000 0x0804d000 0x00008 0x01000 R   0x1000
  LOAD           0x005000 0x0804e000 0x0804e000 0x00008 0x01000 R   0x1000
  LOAD           0x006000 0x0804f000 0x0804f000 0x00008 0x01000 R   0x1000
  LOAD           0x007000 0x08050000 0x08050000 0x00020 0x01000 R   0x1000
  LOAD           0x008000 0x08051000 0x08051000 0x00024 0x01000 R   0x1000
  LOAD           0x009000 0x08052000 0x08052000 0x00040 0x01000 R   0x1000
  LOAD           0x00a000 0x08053000 0x08053000 0x00050 0x01000 R   0x1000
  LOAD           0x00b000 0x08054000 0x08054000 0x000a0 0x01000 RW  0x1000
  LOAD           0x00c000 0x08055000 0x08055000 0x00027 0x01000 R   0x1000
  LOAD           0x00d000 0x08056000 0x08056000 0x00040 0x01000 R   0x1000
  DYNAMIC        0x00b000 0x08054000 0x08054000 0x000a0 0x000a0 RW  0x4

 Section to Segment mapping:
  Segment Sections...
   00
   01     .interp
   02     .interp
   03     .text
   04
   05     .got
   06     .plt
   07     .rel.plt
   08     .rel.dyn
   09     .gnu.version
   10     .gnu.version_r
   11     .hash
   12     .dynsym
   13     .dynstr
   14     .dynamic
   15     .strtab
   16     .symtab
   17     .dynamic

Dynamic segment at offset 0xb000 contains 20 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x00000001 (NEEDED)                     Shared library: [libdl.so.2]
 0x00000004 (HASH)                       0x8051000
 0x00000005 (STRTAB)                     0x8053000
 0x00000006 (SYMTAB)                     0x8052000
 0x0000000a (STRSZ)                      80 (bytes)
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000015 (DEBUG)                      0x0
 0x00000003 (PLTGOT)                     0x804b000
 0x00000002 (PLTRELSZ)                   8 (bytes)
 0x00000014 (PLTREL)                     REL
 0x00000017 (JMPREL)                     0x804d000
 0x00000011 (REL)                        0x804e000
 0x00000012 (RELSZ)                      8 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x6ffffffe (VERNEED)                    0x8050000
 0x6fffffff (VERNEEDNUM)                 1
 0x6ffffff0 (VERSYM)                     0x804f000
 0x00000000 (NULL)                       0x0

Relocation section '.rel.plt' at offset 0x4000 contains 1 entries:
  Offset    Info  Type            Symbol's Value  Symbol's Name
  0804b00c  00207 R_386_JUMP_SLOT       0804c010  __libc_start_main

Relocation section '.rel.dyn' at offset 0x5000 contains 1 entries:
  Offset    Info  Type            Symbol's Value  Symbol's Name
  0804a5fc  00105 R_386_COPY            0804a5fc  environ

There are no unwind sections in this file.

Symbol table '.dynsym' contains 4 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0804a5fc     4 OBJECT  GLOBAL DEFAULT    4 environ
readelf: Error: bad dynamic symbol     2: 0804c010     0 FUNC    GLOBAL DEFAULT
 UND __libc_start_main
     3: 08049000    59 SECTION LOCAL  DEFAULT    2 .text

Symbol table '.symtab' contains 4 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0804b000     0 OBJECT  GLOBAL DEFAULT    4 _GLOBAL_OFFSET_TABLE_
     2: 08054000     0 OBJECT  GLOBAL DEFAULT   13 _DYNAMIC
     3: 08049000     0 FUNC    GLOBAL DEFAULT    2 _start

Histogram for bucket list length (total of 0 buckets):
 Length  Number     % of total  Coverage
Floating point exception
Press any key to continue...

Вот.... Вот в секции .synsym ошибка и в конце воообще что-то непонятное. Причем executable, порожденные gcc, работают и readelf на них не ругается...

anonymous
()
Ответ на: комментарий от anonymous

Кино для настоящих линуксоидов ;)

a readelf -V что говорит ?

похоже что версии libc не совпадают

sS ★★★★★
()
Ответ на: комментарий от Murr

[jek@jerry test]$ objdump -T test

test: file format elf32-i386

DYNAMIC SYMBOL TABLE: 0804a5fc g DO .got 00000004 GLIBC_2.0 environ 0804c010 DF *UND* 00000000 GLIBC_2.0 __libc_start_main 08049000 l d .text 0000003b .text

anonymous
()
Ответ на: комментарий от Murr

[jek@jerry test]$ objdump -T test

test:     file format elf32-i386

DYNAMIC SYMBOL TABLE:
0804a5fc g    DO .got   00000004  GLIBC_2.0   environ
0804c010      DF *UND*  00000000  GLIBC_2.0   __libc_start_main
08049000 l    d  .text  0000003b              .text

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.