readelf:错误:不是ELF文件 - 它在开始时有错误的魔术字节

时间:2014-01-03 07:48:33

标签: elf readelf

我构建了一个程序,它运行良好(我的意思是我可以运行这个程序)。但是当我使用“readelf”检查是否有调试信息时,会出现错误:

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

我的linux发行版是Ubuntu-12。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:9)

它实际上可能不是 ELF可执行文件。有很多东西可以运行,而不是ELF文件(例如shell脚本,Perl文件,Python py源和pyc编译文件)。甚至有些东西会“运行”而根本没有单独的可识别文件(shell中的别名或函数,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文件,您应该尝试将其视为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

当您发现它不是ELF格式时,您所做的事情取决于您要确定的内容,这是您实际未指定的内容。如果您只想在其上运行readelf,那么除非它是ELF格式文件,否则无法使用。

如果您需要有关可执行文件的特定信息,您需要告诉我们:

  • 它是什么类型(例如来自file);和
  • 您想要的信息。