为什么符号大小的总和远小于“.text”部分的大小?
Why sum of symbol size much less than ".text" section size?
我正在 linux 中调试动态共享库,库的名称是 libMNN.so
。
这里是 size -A ./libMNN.so
得到的 libMNN.so
所有部分的大小:
section size addr
.note.gnu.build-id 36 512
.hash 2288 552
.dynsym 7368 2840
.dynstr 11637 10208
.gnu.version 614 21846
.gnu.version_r 64 22464
.rela.dyn 78720 22528
.rela.plt 3960 101248
.plt 2672 105216
.text 804416 107904
.rodata 17772 912320
.eh_frame_hdr 21460 930092
.eh_frame 79160 951552
.note.android.ident 152 1030712
.init_array 1400 1097864
.fini_array 16 1099264
.data.rel.ro 33232 1099280
.dynamic 560 1132512
.got 1512 1133072
.data 8 1134592
.bss 392 1134608
.comment 100 0
Total 1067539
我们可以看到“.text”的大小是804416,“.rodata”的大小是17772。
这里是通过命令readelf -D -sW ./libMNN.so | awk '{print }' | awk '{s+=} END {print s}'
:
得到的符号大小的总和
79000
符号大小之和远小于“.text”和“.rodata”,为什么?
libMNN.so 可以从 https://github.com/alibaba/MNN/releases/download/1.0.0/Android.zip
下载
LibMNN
不导出静态函数、内部函数和内联函数(通过将它们的可见性设置为 "hidden"),因此您看不到它们的符号。由于符号对齐和文字池(存储在 ARM 上的 .text
中),还有一些 space 被浪费了。
我正在 linux 中调试动态共享库,库的名称是 libMNN.so
。
这里是 size -A ./libMNN.so
得到的 libMNN.so
所有部分的大小:
section size addr
.note.gnu.build-id 36 512
.hash 2288 552
.dynsym 7368 2840
.dynstr 11637 10208
.gnu.version 614 21846
.gnu.version_r 64 22464
.rela.dyn 78720 22528
.rela.plt 3960 101248
.plt 2672 105216
.text 804416 107904
.rodata 17772 912320
.eh_frame_hdr 21460 930092
.eh_frame 79160 951552
.note.android.ident 152 1030712
.init_array 1400 1097864
.fini_array 16 1099264
.data.rel.ro 33232 1099280
.dynamic 560 1132512
.got 1512 1133072
.data 8 1134592
.bss 392 1134608
.comment 100 0
Total 1067539
我们可以看到“.text”的大小是804416,“.rodata”的大小是17772。
这里是通过命令readelf -D -sW ./libMNN.so | awk '{print }' | awk '{s+=} END {print s}'
:
79000
符号大小之和远小于“.text”和“.rodata”,为什么?
libMNN.so 可以从 https://github.com/alibaba/MNN/releases/download/1.0.0/Android.zip
下载LibMNN
不导出静态函数、内部函数和内联函数(通过将它们的可见性设置为 "hidden"),因此您看不到它们的符号。由于符号对齐和文字池(存储在 ARM 上的 .text
中),还有一些 space 被浪费了。