readelf -W -l ~/2065500101/infosec-lab10/badfile | grep GNU_STACK readelf:错误: 不是 ELF 文件 - 它开头的 magic 字节错误
时间: 2024-03-24 21:36:41 浏览: 88
这个错误可能是因为你指定的文件不是一个ELF二进制文件,或者文件路径不正确。请确保你指定的文件路径正确,并且文件确实是一个ELF格式的二进制文件。
你可以使用"file"命令来检查文件类型,例如:
```
file /path/to/binary/file
```
如果输出结果中包含"ELF"字样,说明该文件是一个ELF格式的二进制文件,可以使用"readelf"命令来检查其ELF头部信息。如果输出结果中不包含"ELF"字样,则说明该文件不是一个ELF二进制文件,此时就无法使用"readelf"命令来检查其ELF头部信息了。
一些其他的命令也可以检查文件是否为ELF格式,例如:
```
objdump -h /path/to/binary/file
```
如果输出结果包含".text"段,说明该文件是一个ELF格式的二进制文件。如果输出结果中没有".text"段,则说明该文件不是一个ELF二进制文件。
相关问题
readelf -W -l <stack> | grep GNU_STACK bash: 未预期的记号 "|" 附近有语法错误
抱歉,我的回答中存在错误。命令中的"\<stack\>"应该替换为要检查的二进制文件的路径。以下是正确的命令:
```
readelf -W -l /path/to/binary/file | grep GNU_STACK
```
其中,"/path/to/binary/file"应替换为要检查的二进制文件的实际路径。
如果输出结果中包含"GNU_STACK 0x0",则说明程序的堆栈不可执行,即"-z execstack"选项生效了,否则说明该选项未生效。
readelf -h /usr/local/lib/libleveldb.a
`readelf` 是一个用于查看二进制文件的工具,在这里用于查看静态库文件 `/usr/local/lib/libleveldb.a` 的头部信息。
执行以下命令以查看头部信息:
```
readelf -h /usr/local/lib/libleveldb.a
```
其中,参数 `-h` 表示查看文件头部信息。
输出类似以下内容:
```
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: REL (Relocatable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x0
Start of program headers: 0 (bytes into file)
Start of section headers: 688 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 0 (bytes)
Number of program headers: 0
Size of section headers: 64 (bytes)
Number of section headers: 12
Section header string table index: 11
```
其中,我们可以看到一些重要的信息,比如:
- 类型 `Type` 是 `REL`,表示是一个可重定位文件。
- 机器架构 `Machine` 是 `Advanced Micro Devices X86-64`,即 x86-64 架构。
- 文件头部大小 `Size of this header` 是 `64` 字节。
- 节头部数量 `Number of section headers` 是 `12`。
- 节头部字符串表索引 `Section header string table index` 是 `11`,表示节头部字符串表在第 11 个位置。
需要注意的是,这里查看的是静态库文件,因此 `Entry point address` 和 `Start of program headers` 等信息都是 0。
阅读全文