- Очевидно, перед .init_array в общих объектах всегда есть пробел. Это просто соглашение? Я не могу найти никаких ссылок на него.
- Кроме того, столбец размера не соответствует фактическому дисковому пространству. Я предполагаю, что общий размер в столбце размера не учитывает заполнение между сегментами/разделами.
Содержимое в foo.c
#include
void foo(void)
{
puts("Hello, I am a shared library");
}
gcc -c -Wall -Werror -fpic -g3 foo.c
gcc -shared -o libfoo.so foo.o
При проверке файла SO я получаю следующий результат.
❯ size -A -d libfoo.so
libfoo.so :
section size addr
.note.gnu.build-id 36 456
.gnu.hash 60 496
.dynsym 336 560
.dynstr 172 896
.gnu.version 28 1068
.gnu.version_r 32 1096
.rela.dyn 192 1128
.rela.plt 24 1320
.init 26 1344
.plt 32 1376
.plt.got 16 1408
.text 275 1424
.fini 9 1700
.rodata 29 1709
.eh_frame_hdr 28 1740
.eh_frame 100 1768
.init_array 8 2100736
.fini_array 8 2100744
.jcr 8 2100752
.dynamic 448 2100760
.got 40 2101208
.got.plt 32 2101248
.data 8 2101280
.bss 8 2101288
.comment 53 0
.debug_aranges 48 0
.debug_info 145 0
.debug_abbrev 69 0
.debug_line 424 0
.debug_str 15511 0
.debug_macro 4020 0
Total 22225
❯ l -l libfoo.so
-rwxr-xr-x 1 root root 28936 Apr 17 18:48 libfoo.so*
Подробнее здесь: https://stackoverflow.com/questions/783 ... -in-shared
Мобильная версия