几个命令了解ELF文件的”秘密“
原创几个命令了解ELF文件的“秘密”
ELF(Executable and Linkable Format)文件格式是UNIX和Linux系统中常用的可执行文件、对象文件和共享库的格式。它包含了程序运行所需的所有信息,如代码、数据、符号表等。通过一些命令行工具,我们可以深入了解ELF文件的结构和内容。以下是一些常用的命令,帮助您揭开ELF文件的“秘密”。
1. objdump
objdump是GNU Binutils工具集中的一个命令行工具,它可以用来查看ELF文件中的各种信息。以下是一些objdump命令的示例:
-
objdump -h filename
这个命令会列出ELF文件中的所有段和符号。
-
objdump -t filename
这个命令会列出ELF文件中的所有符号。
-
objdump -d filename
这个命令会反汇编ELF文件中的代码。
-
objdump -s filename
这个命令会显示ELF文件中的符号表和动态链接信息。
下面是一个使用objdump命令查看ELF文件段信息的示例:
objdump -h hello_world.elf
输出最终如下:
Segment names:
.text
.data
.bss
.comment
.note.GNU-stack
.note.gnu.build-id
.dynamic
.rela.dyn
.rela.plt
.interp
2. readelf
readelf是GNU Binutils工具集中的另一个命令行工具,用于显示ELF文件中的各种信息。以下是一些readelf命令的示例:
-
readelf -h filename
这个命令会显示ELF文件的头部信息。
-
readelf -s filename
这个命令会显示ELF文件中的符号表。
-
readelf -d filename
这个命令会显示ELF文件中的动态链接信息。
下面是一个使用readelf命令查看ELF文件头部信息的示例:
readelf -h hello_world.elf
输出最终如下:
ELF Header:
Magic: 7f 45 4c 46 02 00 00 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: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x4005e0
Start of program headers: 64 (bytes into file)
Start of section headers: 528 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 1
Size of section headers: 64 (bytes)
Number of section headers: 12
Section header string table index: 10
3. nm
nm是GNU Binutils工具集中的一个命令行工具,用于列出ELF文件中的符号。以下是一些nm命令的示例:
-
nm -C filename
这个命令会以符号名排序的方法列出ELF文件中的符号。
-
nm -f a filename
这个命令会将符号名称变成大写字母。
-
nm -p filename
这个命令会列出ELF文件中的所有符号,包括未定义的符号。
下面是一个使用nm命令列出ELF文件中符号的示例:
nm -C hello_world.elf
输出最终如下:
U _main
其中,"U"描述未定义的符号,"main"是ELF文件中的主函数。
4. strings
strings是GNU Binutils工具集中的一个命令行工具,用于查找ELF文件中的字符串。以下是一些strings命令的示例:
-
strings filename
这个命令会列出ELF文件中的所有字符串。
-
strings -t d filename
这个命令会以十六进制形式显示字符串。
下面是一个使用strings命令查找ELF文件中字符串的示例:
strings hello_world.elf
输出最终如下:
hello world!
通过以上几个命令,我们可以了解到ELF文件的结构