为什么符号大小之和远小于“ .text”节的大小?

问题描述 投票:0回答:1

我正在linux中调试动态共享库,该库的名称为libMNN.so

这是libMNN.so得出的size -A ./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 $4}' | awk '{s+=$1} END {print s}'获得的符号大小的总和:

79000

符号大小的总和比“ .text”和“ .rodata”小得多,为什么?

libMNN.so可以从https://github.com/alibaba/MNN/releases/download/1.0.0/Android.zip下载

linux gcc compilation elf readelf
1个回答
0
投票

LibMNN不会导出静态,内部和内联函数(通过将其可见性设置为“隐藏”),因此您看不到它们的符号。由于符号对齐和文字池(存储在ARM上的.text中),浪费了更多空间。

© www.soinside.com 2019 - 2024. All rights reserved.