当前位置:首页 > linux > 正文

linux可执行文件(linux多个命令一起执行)

  • linux
  • 2024-04-06 04:35:24
  • 170
Linux 可执行文件
Linux 可执行文件是一种包含机器代码和其他元数据的文件,可以由操作系统执行。 它们通常以 .exe 后缀结尾。
可执行文件的主要要素:
ELF 头部 (ELF Header):包含文件类型、处理器类型和其他元数据。
程序头表 (Program Header Table):指定可执行文件在内存中加载的位置和权限。
节头部表 (Section Header Table):描述可执行文件中的不同节,如代码节、数据节和符号表。
代码节 (Code Section):包含可执行代码。
数据节 (Data Section):包含已初始化的全局数据。
BSS 节 (BSS Section):包含未初始化的全局数据。
符号表 (Symbol Table):列出可执行文件中函数和变量的符号。
重定位表 (Relocation Table):存储可执行文件在加载到内存后需要更新的偏移量。
动态链接 (Dynamic Linking):允许可执行文件在运行时链接到共享库。
示例:
考虑一个简单的 C 程序 hello.c,它打印 "Hello, world!":
c
#include
int main() {
printf("Hello, world!\n");
return 0;
}
编译此程序后,将生成可执行文件 hello:
bash
$ gcc hello.c -o hello
如果我们使用 objdump 工具来查看此可执行文件,我们可以看到以下要素:
bash
$ objdump -h hello
hello: file format elf64-x86-64
Sections:
Idx Name Size VMA LMA File off Algn
0 .interp 16 0000000000400200 0000000000400200 000200 16
1 .note.ABI-tag 4 0000000000400210 0000000000400210 000210 4
2 .note.gnu.build-id 36 0000000000400214 0000000000400214 000214 4
3 .gnu.hash 24 0000000000400250 0000000000400250 000250 8
4 .dynsym 88 0000000000400318 0000000000400318 000318 8
5 .dynstr 66 00000000004003a0 00000000004003a0 0003a0 1
6 .rela.dyn 18 0000000000400408 0000000000400408 000408 8
7 .rela.plt 24 0000000000400420 0000000000400420 000420 8
8 .init 16 0000000000400440 0000000000400440 000440 16
9 .plt 40 0000000000400450 0000000000400450 000450 16
10 .text 72 0000000000400490 0000000000400490 000490 16
11 .fini 16 00000000004004f0 00000000004004f0 0004f0 16
12 .rodata 28 0000000000400500 0000000000400500 000500 8
13 .eh_frame 112 0000000000400528 0000000000400528 000528 8
ELF 头部:此部分显示文件格式和处理器类型。
节头部表:它列出了可执行文件中的 13 个节,包括代码节(.text)、数据节(.data)和符号表(.dynsym)。
代码节:它包含函数 main 的机器代码。
数据节:它包含字符串 "Hello, world!"。
符号表:它列出 main 符号。