Символ — это просто имя, идентификатор. Его наличие не означает, что в файле присутствуют данные или код, на которые он ссылается. Вы просто не на то смотрите. Вот два файлика:
Код: Выделить всё
hello: формат файла elf64-x86-64
Разделы:
Idx Name Разм VMA LMA Фа смещ. Выр.
0 .note.gnu.property 00000020 0000000000000350 0000000000000350 00000350 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.gnu.build-id 00000024 0000000000000370 0000000000000370 00000370 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .interp 0000001c 0000000000000394 0000000000000394 00000394 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .gnu.hash 00000024 00000000000003b0 00000000000003b0 000003b0 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .dynsym 000000a8 00000000000003d8 00000000000003d8 000003d8 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .dynstr 0000008d 0000000000000480 0000000000000480 00000480 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .gnu.version 0000000e 000000000000050e 000000000000050e 0000050e 2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .gnu.version_r 00000030 0000000000000520 0000000000000520 00000520 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .rela.dyn 000000c0 0000000000000550 0000000000000550 00000550 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 .rela.plt 00000018 0000000000000610 0000000000000610 00000610 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
10 .init 00000017 0000000000001000 0000000000001000 00001000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
11 .plt 00000020 0000000000001020 0000000000001020 00001020 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .plt.got 00000008 0000000000001040 0000000000001040 00001040 2**3
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .text 00000103 0000000000001050 0000000000001050 00001050 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
14 .fini 00000009 0000000000001154 0000000000001154 00001154 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
15 .rodata 00000008 0000000000002000 0000000000002000 00002000 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
16 .eh_frame_hdr 0000002c 0000000000002008 0000000000002008 00002008 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
17 .eh_frame 000000a4 0000000000002038 0000000000002038 00002038 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
18 .note.ABI-tag 00000020 00000000000020dc 00000000000020dc 000020dc 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
19 .init_array 00000008 0000000000003dd0 0000000000003dd0 00002dd0 2**3
CONTENTS, ALLOC, LOAD, DATA
20 .fini_array 00000008 0000000000003dd8 0000000000003dd8 00002dd8 2**3
CONTENTS, ALLOC, LOAD, DATA
21 .dynamic 000001e0 0000000000003de0 0000000000003de0 00002de0 2**3
CONTENTS, ALLOC, LOAD, DATA
22 .got 00000028 0000000000003fc0 0000000000003fc0 00002fc0 2**3
CONTENTS, ALLOC, LOAD, DATA
23 .got.plt 00000020 0000000000003fe8 0000000000003fe8 00002fe8 2**3
CONTENTS, ALLOC, LOAD, DATA
24 .data 00000010 0000000000004008 0000000000004008 00003008 2**3
CONTENTS, ALLOC, LOAD, DATA
25 .bss 00000008 0000000000004018 0000000000004018 00003018 2**0
ALLOC
26 .comment 0000001f 0000000000000000 0000000000000000 00003018 2**0
CONTENTS, READONLY
27 .debug_aranges 00000030 0000000000000000 0000000000000000 00003037 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
28 .debug_info 000000ca 0000000000000000 0000000000000000 00003067 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
29 .debug_abbrev 00000083 0000000000000000 0000000000000000 00003131 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
30 .debug_line 0000005a 0000000000000000 0000000000000000 000031b4 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
31 .debug_str 000000a0 0000000000000000 0000000000000000 0000320e 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
32 .debug_line_str 00000032 0000000000000000 0000000000000000 000032ae 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
Код: Выделить всё
hello.dbg: формат файла elf64-x86-64
Разделы:
Idx Name Разм VMA LMA Фа смещ. Выр.
0 .note.gnu.property 00000020 0000000000000350 0000000000000350 00000350 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.gnu.build-id 00000024 0000000000000370 0000000000000370 00000370 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .interp 0000001c 0000000000000394 0000000000000394 00000394 2**0
ALLOC, READONLY
3 .gnu.hash 00000024 00000000000003b0 00000000000003b0 00000394 2**3
ALLOC, READONLY
4 .dynsym 000000a8 00000000000003d8 00000000000003d8 00000394 2**3
ALLOC, READONLY
5 .dynstr 0000008d 0000000000000480 0000000000000480 00000394 2**0
ALLOC, READONLY
6 .gnu.version 0000000e 000000000000050e 000000000000050e 00000394 2**1
ALLOC, READONLY
7 .gnu.version_r 00000030 0000000000000520 0000000000000520 00000394 2**3
ALLOC, READONLY
8 .rela.dyn 000000c0 0000000000000550 0000000000000550 00000394 2**3
ALLOC, READONLY
9 .rela.plt 00000018 0000000000000610 0000000000000610 00000394 2**3
ALLOC, READONLY
10 .init 00000017 0000000000001000 0000000000001000 00001000 2**2
ALLOC, READONLY, CODE
11 .plt 00000020 0000000000001020 0000000000001020 00001000 2**4
ALLOC, READONLY, CODE
12 .plt.got 00000008 0000000000001040 0000000000001040 00001000 2**3
ALLOC, READONLY, CODE
13 .text 00000103 0000000000001050 0000000000001050 00001000 2**4
ALLOC, READONLY, CODE
14 .fini 00000009 0000000000001154 0000000000001154 00001000 2**2
ALLOC, READONLY, CODE
15 .rodata 00000008 0000000000002000 0000000000002000 00001000 2**2
ALLOC, READONLY
16 .eh_frame_hdr 0000002c 0000000000002008 0000000000002008 00001000 2**2
ALLOC, READONLY
17 .eh_frame 000000a4 0000000000002038 0000000000002038 00001000 2**3
ALLOC, READONLY
18 .note.ABI-tag 00000020 00000000000020dc 00000000000020dc 000010dc 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
19 .init_array 00000008 0000000000003dd0 0000000000003dd0 00001dd0 2**3
ALLOC
20 .fini_array 00000008 0000000000003dd8 0000000000003dd8 00001dd0 2**3
ALLOC
21 .dynamic 000001e0 0000000000003de0 0000000000003de0 00001dd0 2**3
ALLOC
22 .got 00000028 0000000000003fc0 0000000000003fc0 00001dd0 2**3
ALLOC
23 .got.plt 00000020 0000000000003fe8 0000000000003fe8 00001dd0 2**3
ALLOC
24 .data 00000010 0000000000004008 0000000000004008 00001dd0 2**3
ALLOC
25 .bss 00000008 0000000000004018 0000000000004018 00001dd0 2**0
ALLOC
26 .comment 0000001f 0000000000000000 0000000000000000 000010fc 2**0
CONTENTS, READONLY
27 .debug_aranges 00000030 0000000000000000 0000000000000000 0000111b 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
28 .debug_info 000000ca 0000000000000000 0000000000000000 0000114b 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
29 .debug_abbrev 00000083 0000000000000000 0000000000000000 00001215 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
30 .debug_line 0000005a 0000000000000000 0000000000000000 00001298 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
31 .debug_str 000000a0 0000000000000000 0000000000000000 000012f2 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
32 .debug_line_str 00000032 0000000000000000 0000000000000000 00001392 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
Секции одни и те же, но посмотрите на их смещение. У секций 2–9, 10–17 и 19–25 во втором файле оно совпадает, то есть секции 2–8, 10–16 и 19–24 пустые. Отсутствует, например, .text. А символы, ссылающиеся туда, есть:
Shell
% nm hello.dbg | grep '\<T\>'
0000000000001154 T _fini
0000000000001000 T _init
0000000000001139 T main
0000000000001050 T _start
%
Потому что они нужны для отладки, без них отладчик не поймёт, где что в корке.