What is the purpose of 00 segment?
Peng Yu
pengyu.ut@gmail.com
Fri Apr 23 17:19:57 GMT 2021
Hi,
The following example shows there are two segments. But only the 2nd
segment is relevant to .text. The 1st segment just contains the ELF
header and something (is the "something" relevant to running the
program?). If the first segment is removed, the program still runs?
I don't get why the first segment is there. Can anybody explain? Thanks.
$ cat main.asm
global _start
_start:
SYS_EXIT equ 60
mov rax, SYS_EXIT
mov rdi, 42
syscall
$ nasm -felf64 main.asm
$ ld -o main.exe main.o
$ readelf -lW main.exe
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 Flg Align
LOAD 0x000000 0x0000000000400000 0x0000000000400000
0x0000b0 0x0000b0 R 0x1000
LOAD 0x001000 0x0000000000401000 0x0000000000401000
0x00000c 0x00000c R E 0x1000
Section to Segment mapping:
Segment Sections...
00
01 .text
$ readelf -SW main.exe
There are 5 section headers, starting at offset 0x1120:
Section Headers:
[Nr] Name Type Address Off Size
ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000
000000 00 0 0 0
[ 1] .text PROGBITS 0000000000401000 001000
00000c 00 AX 0 0 16
[ 2] .symtab SYMTAB 0000000000000000 001010
0000c0 18 3 4 8
[ 3] .strtab STRTAB 0000000000000000 0010d0
00002b 00 0 0 1
[ 4] .shstrtab STRTAB 0000000000000000 0010fb
000021 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
l (large), p (processor specific)
--
Regards,
Peng
More information about the Binutils
mailing list