9

我构建了一个程序,它运行良好(我的意思是我可以运行这个程序)。但是当我使用“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。有人可以帮助我吗?

4

1 回答 1

13

它实际上可能不是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 文件时,您才应该尝试这样对待它。

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例如);和
  • 你想要的信息。
于 2014-01-03T07:51:21.453 回答