strip命令简介

在实际的Linux开发中,除了执行文件以外,会有一个用来调试的文件,类型为not striped,想要了解此文件的作用以及产生的原因,首先要了解strip命令。

strip命令用于去除文件中的符号信息。

首先来看一个文件a.out的大小是9918个字节,是not stripped。
通过nm命令, 可以读出a.out中的符号信息。

chenpi@General:~$ ls -l a.out
-rwxrwxr-x 1 chenpi chenpi 9918 Sep  7  2019 a.out
chenpi@General:~$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.24, 
BuildID[sha1]=0x8ad2d3226312c6ec9f3dbf185b26df73e4d1710b, 
not stripped
chenpi@General:~$ nm a.out
0000000000600e50 d _DYNAMIC
0000000000600fe8 d _GLOBAL_OFFSET_TABLE_
0000000000400678 R _IO_stdin_used
                 w _Jv_RegisterClasses
0000000000600e30 d __CTOR_END__
0000000000600e28 d __CTOR_LIST__
0000000000600e40 D __DTOR_END__
0000000000600e38 d __DTOR_LIST__
0000000000400778 r __FRAME_END__
0000000000600e48 d __JCR_END__
0000000000600e48 d __JCR_LIST__
0000000000601020 A __bss_start
0000000000601010 D __data_start
0000000000400630 t __do_global_ctors_aux
0000000000400460 t __do_global_dtors_aux
0000000000601018 D __dso_handle
                 w __gmon_start__
0000000000600e24 d __init_array_end
0000000000600e24 d __init_array_start
0000000000400620 T __libc_csu_fini
0000000000400590 T __libc_csu_init
                 U __libc_start_main@@GLIBC_2.2.5
0000000000601020 A _edata
0000000000601030 A _end
0000000000400668 T _fini
00000000004003c8 T _init
0000000000400410 T _start
00000000004004f4 T add
000000000040043c t call_gmon_start
0000000000601020 b completed.6531
0000000000601010 W data_start
0000000000601028 b dtor_idx.6533
00000000004004d0 t frame_dummy
000000000040051d T main

strip后a.out的大小是6200个字节,且是stripped。
通过nm命令, 发现a.out中的符号没有了。

chenpi@General:~$ strip a.out
chenpi@General:~$ ls -l a.out
-rwxr--r-- 1 chenpi chenpi 6200 May  6 15:46 a.out
chenpi@General:~$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.24, 
BuildID[sha1]=0x8ad2d3226312c6ec9f3dbf185b26df73e4d1710b, 
stripped
chenpi@General:~$ nm a.out
nm: a.out: no symbols

由此可见,在strip之后文件变小了,但仍然可以执行, 节省了很多空间。而在调试的时候,就需要符号了。因此,将strip前的文件备份下来用于调试, 而strip后的文件用来实际发布。

另外,strip不仅仅可以针对可执行文件, 还能针对目标文件和动态库等。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值