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