2014-01-03 3 views
3

Я строю программу, и она работает хорошо (я имею в виду, что я могу запустить эту программу). Но когда я использую «readelf», чтобы проверить, есть ли отладочная информация, ошибки прийти:readelf: Ошибка: не файл ELF - у него неправильные магические байты в начале

readelf: Error: Not an ELF file - it has the wrong magic bytes at the start  
readelf: Error: test/select: Failed to read file header 

Мой дистрибутив является Ubuntu-12. Кто-нибудь может мне помочь?

+0

Файл, который вы даете readelf, не является файлом ELF - я думаю, это довольно очевидно. Без дополнительной информации вы можете получить всю помощь. Возможно, покажите свою командную строку readelf? –

ответ

7

Это может быть не be a ELF исполняемый файл. Есть много вещей, которые будут выполняться, которые не являются файлами ELF (такими как скрипты оболочки, файлы Perl, исходные файлы Python py и скомпилированные файлы). Есть даже те вещи, которые будут «работать» без отдельного идентифицируемого файла вообще (псевдонимы или функции в вашей оболочке, bash встроенных и т. Д.).

Я бы первым выполнить:

file /path/to/your/file 

, чтобы увидеть, какой файл он на самом деле есть например, с помощью:

pax> file /bin/ls 
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
     dynamically linked (uses shared libs), for GNU/Linux 2.6.26, 
     BuildID[sha1]=0xd3280633faaabf56a14a26693d2f810a32222e51, 
     stripped 

Только если он признан как файл ELF вы должны попробовать рассматривать ее как таковую.

pax> readelf -h /bin/ls 
ELF Header: 
    Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
    Class:        ELF32 
    Data:        2's complement, little endian 
    Version:       1 (current) 
    OS/ABI:       UNIX - System V 
    ABI Version:      0 
    Type:        EXEC (Executable file) 
    Machine:       Intel 80386 
    Version:       0x1 
    Entry point address:    0x804c1b4 
    Start of program headers:   52 (bytes into file) 
    Start of section headers:   111580 (bytes into file) 
    Flags:        0x0 
    Size of this header:    52 (bytes) 
    Size of program headers:   32 (bytes) 
    Number of program headers:   9 
    Size of section headers:   40 (bytes) 
    Number of section headers:   28 
    Section header string table index: 27 

Для чего это стоит, у меня есть сценарий резервного копирования, который выполняет только штраф, но который потерпит неудачу вашего readelf предположения:

pax> file backup1.sh 
backup1.sh: Bourne-Again shell script, ASCII text executable 

pax> readelf -h backup1.sh 
readelf: Error: Unable to read in 0x253a bytes of section headers 
readelf: Error: Not an ELF file - it has the wrong magic bytes at the start 

Что касается того, что вы делаете, когда вы узнали, что ISN 't Формат ELF, который зависит от того, что вы пытаетесь выяснить, что вы на самом деле не указали. Если все, что вы хотите сделать, это запустить readelf, это не сработает, если это не файл формата ELF.

Если вы хотите какую-либо конкретную информацию о исполняемом файле, вы должны сказать нам, как:

  • какой тип это (от file, например); и
  • информацию, которую вы хотите.
+0

вы просто объясняете, как проверить, почему он терпит неудачу. Замечательно, но как вы можете решить проблему с этой информацией? – Magpie

+0

@Magpie, вы запускаете 'file whateverYourFileIs', чтобы посмотреть, какой файл он, согласно моему ответу. Я гарантирую, что это не исполняемый файл ELF (иначе 'readelf' будет работать). То, что вы делаете после этого, зависит от того, _why_ вы пытаетесь запустить 'readelf' на нем (т. Е. Какая информация вы на самом деле после), которую OP не указал. Я думал, что это будет само собой разумеющимся, но, может быть, я ошибаюсь, поэтому я уточню. – paxdiablo

+0

Хорошо спасибо, но я не могу сказать вам, с чем у @Eric возникают проблемы, и я беру вашу мысль. Это не разъяснено, поэтому требуется дополнительная информация, которая верна. – Magpie