У меня есть следующая простая программа "hello world":
#include <stdio.h>
int main() {
printf("Hello world.\n");
return 0;
}
Я компилирую как
gcc -static -O0 -g -std=gnu11 -o test_helloworld test_helloworld.c -lpthread
Теперь я хочу проверить сегмент памяти, введя readelf -l
и получить следующий вывод:
Elf file type is EXEC (Executable file)
Entry point 0x400890
There are 6 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x00000000000c96cf 0x00000000000c96cf R E 200000
LOAD 0x00000000000c9eb8 0x00000000006c9eb8 0x00000000006c9eb8
0x0000000000001c98 0x00000000000035b0 RW 200000
NOTE 0x0000000000000190 0x0000000000400190 0x0000000000400190
0x0000000000000044 0x0000000000000044 R 4
TLS 0x00000000000c9eb8 0x00000000006c9eb8 0x00000000006c9eb8
0x0000000000000020 0x0000000000000050 R 8
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 10
GNU_RELRO 0x00000000000c9eb8 0x00000000006c9eb8 0x00000000006c9eb8
0x0000000000000148 0x0000000000000148 R 1
Я запутался в столбце Align
: это число в байтах или килобайтах? Я думал, что выравнивание должно быть равно размеру страницы. Почему я получаю этот номер?
Спасибо!