这是一个非常简单的汇编程序,执行后只需返回
12
。$ cat a.asm
global _start
section .text
_start: mov rax, 60 ; system call for exit
mov rdi, 12 ; exit code 12
syscall
它可以正确地构建和执行:
$ nasm -f elf64 a.asm && ld a.o && ./a.out || echo $?
12
但 a.out 文件的大小很大,超过了 4k:
$ wc -c a.out
4664 a.out
我尝试通过阅读ELF内容来理解它:
$ readelf -l a.out
Elf file type is EXEC (Executable file)
Entry point 0x401000
There are 2 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x00000000000000b0 0x00000000000000b0 R 0x1000
LOAD 0x0000000000001000 0x0000000000401000 0x0000000000401000
0x000000000000000c 0x000000000000000c R E 0x1000
Section to Segment mapping:
Segment Sections...
00
01 .text
很奇怪,段00按0x1000对齐,我认为这意味着至少要占用4096字节的空间。
我的问题是,这个段00是什么?
(nasm版本2.14.02,ld版本2.34,操作系统为Ubuntu 20.04.1)