首页 » 信息技术 »

strip命令不能改变程序内存占用

2020年7月16日 / 3次阅读
Linux

学艺不精,犯了个错误,strip命令只能改变程序文件的大小,去掉一些section后,程序文件大小会减少,但是程序运行期间的内存占用不会改变。

减少文件大小,可以减少磁盘空间的占用,也可以减少网络传输。

readelf命令显示可执行文件的所有的section:

$ readelf -S hh1
There are 35 section headers, starting at offset 0x22f4:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS        00010154 000154 000019 00   A  0   0  1
  [ 2] .note.ABI-tag     NOTE            00010170 000170 000020 00   A  0   0  4
  [ 3] .note.gnu.build-i NOTE            00010190 000190 000024 00   A  0   0  4
  [ 4] .gnu.hash         GNU_HASH        000101b4 0001b4 00002c 04   A  5   0  4
  [ 5] .dynsym           DYNSYM          000101e0 0001e0 000050 10   A  6   1  4
  [ 6] .dynstr           STRTAB          00010230 000230 000041 00   A  0   0  1
  [ 7] .gnu.version      VERSYM          00010272 000272 00000a 02   A  5   0  2
  [ 8] .gnu.version_r    VERNEED         0001027c 00027c 000020 00   A  6   1  4
  [ 9] .rel.dyn          REL             0001029c 00029c 000008 08   A  5   0  4
  [10] .rel.plt          REL             000102a4 0002a4 000020 08  AI  5  21  4
  [11] .init             PROGBITS        000102c4 0002c4 00000c 00  AX  0   0  4
  [12] .plt              PROGBITS        000102d0 0002d0 000044 04  AX  0   0  4
  [13] .text             PROGBITS        00010314 000314 000174 00  AX  0   0  4
  [14] .fini             PROGBITS        00010488 000488 000008 00  AX  0   0  4
  [15] .rodata           PROGBITS        00010490 000490 00000a 00   A  0   0  4
  [16] .ARM.exidx        ARM_EXIDX       0001049c 00049c 000008 00  AL 13   0  4
  [17] .eh_frame         PROGBITS        000104a4 0004a4 000004 00   A  0   0  4
  [18] .init_array       INIT_ARRAY      00020f10 000f10 000004 04  WA  0   0  4
  [19] .fini_array       FINI_ARRAY      00020f14 000f14 000004 04  WA  0   0  4
  [20] .dynamic          DYNAMIC         00020f18 000f18 0000e8 08  WA  6   0  4
  [21] .got              PROGBITS        00021000 001000 000020 04  WA  0   0  4
  [22] .data             PROGBITS        00021020 001020 000008 00  WA  0   0  4
  [23] .bss              NOBITS          00021028 001028 000004 00  WA  0   0  1
  [24] .comment          PROGBITS        00000000 001028 000023 01  MS  0   0  1
  [25] .ARM.attributes   ARM_ATTRIBUTES  00000000 00104b 00002f 00      0   0  1
  [26] .debug_aranges    PROGBITS        00000000 00107a 000020 00      0   0  1
  [27] .debug_info       PROGBITS        00000000 00109a 00030b 00      0   0  1
  [28] .debug_abbrev     PROGBITS        00000000 0013a5 0000ce 00      0   0  1
  [29] .debug_line       PROGBITS        00000000 001473 000116 00      0   0  1
  [30] .debug_frame      PROGBITS        00000000 00158c 00002c 00      0   0  4
  [31] .debug_str        PROGBITS        00000000 0015b8 000267 01  MS  0   0  1
  [32] .symtab           SYMTAB          00000000 001820 0006c0 10     33  86  4
  [33] .strtab           STRTAB          00000000 001ee0 0002c0 00      0   0  1
  [34] .shstrtab         STRTAB          00000000 0021a0 000152 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  y (purecode), p (processor specific)

Flg列有A的才是在执行时,可以被alloc到内存的section,这些section都有Addr(程序的虚拟地址)。

而那些没有Addr,Flg也没有A属性的section,有些可以被strip掉,但是这些section在程序执行过程中,不会被加载到内存。

本文链接:https://www.maixj.net/ict/strip-23820

相关文章

留言区

《strip命令不能改变程序内存占用》有1条留言

  • 麦新杰

    如果对.o文件进行strip,link的时候回报错,因为.rel.text被拿掉了。 []


前一篇:

-->只要几分钟回答问卷,就能轻松赚现金!

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top