預處理、編譯、彙編、連接 中的 test.c為例:

parallels@ubuntu-linux-20-04-desktop:~/C_playground$ file test.c
test.c: C source, ASCII text
parallels@ubuntu-linux-20-04-desktop:~/C_playground$ file test.i
test.i: C source, ASCII text
parallels@ubuntu-linux-20-04-desktop:~/C_playground$ file test.s
test.s: assembler source, ASCII text
parallels@ubuntu-linux-20-04-desktop:~/C_playground$ file test.o
test.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped
parallels@ubuntu-linux-20-04-desktop:~/C_playground$ file /bin/bash
/bin/bash: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=19c1f2a28c01699ce7b04b4767027253c7316908, for GNU/Linux 3.7.0, stripped

/* 
simpleSection.c
gcc -c simpleSection.c 
*/
 
int printf(const char *format, ...);
 
int global_var = 84;
int global_uninit_var;
 
void func1(int i)
{
    printf("%d\n", i);
}
 
int main(void)
{
    static int static_var = 85;
    static int static_var2;
    int a = 1;
    int b;
 
    func1(static_var + static_var2 + a + b);
 
    return a;
}
 

Run: gcc -c test.c -o test.o and objdump -h test.o

可以注意到 .bss 中沒有 CONTENTS,代表在實際的 ELF file 中這一段是不存在的。

test.o:     file format elf64-littleaarch64
 
Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .text         00000074  0000000000000000  0000000000000000  00000040  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 .data         00000008  0000000000000000  0000000000000000  000000b4  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000004  0000000000000000  0000000000000000  000000bc  2**2
                  ALLOC
  3 .rodata       00000004  0000000000000000  0000000000000000  000000c0  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .comment      0000002c  0000000000000000  0000000000000000  000000c4  2**0
                  CONTENTS, READONLY
  5 .note.GNU-stack 00000000  0000000000000000  0000000000000000  000000f0  2**0
                  CONTENTS, READONLY
  6 .eh_frame     00000058  0000000000000000  0000000000000000  000000f0  2**3
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA