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