Linux下的strip命令学习
strip
strip是Linux下的一个命令。可以用于给应用脱衣服,帮助我们抹除一些调试信息。(虽然不知道具体是什么,但是会用就好了
)
在嵌入式开发领域用到的应该比较多
首先,先写一个示例看看
//hello.cpp
#include <iostream>
using namespace std;
int main() {
int i = 10;
for(;i > 0;i--) {
cout<<"hello,i = "<<(10 - i)<<endl;
}
return 0;
}
好了,编译一下,看下大小
$ g++ hello.cpp -o hello.out
$ ls -l
total 16
-rw-r--r-- 1 root root 171 Jul 12 3:00 hello.cpp
-rwxr-xr-x 1 root root 8968 Jul 12 3:00 hello.out
$
我们可以看到大小是8k左右,那么我们来strip看下
$ strip hello.out -o hello.strip.out
$ ls -l
total 24
-rw-r--r-- 1 root root 171 Jul 12 3:00 hello.cpp
-rwxr-xr-x 1 root root 8968 Jul 12 3:00 hello.out
-rwxr-xr-x 1 root root 6120 Jul 12 3:10 hello.strip.out
$
很好,我们可以看到文件明显减少了许多,现在是一个6k左右的文件
6120÷8968≈0.6824=68.24%
1-68.24%=31.76%
减少了大概31.76%
嗯... 应该是加的库越多可以减少的越多吧。
那么我们来看看能不能正常运行
$ ./hello.strip.out
hello,i = 0
hello,i = 1
hello,i = 2
hello,i = 3
hello,i = 4
hello,i = 5
hello,i = 6
hello,i = 7
hello,i = 8
hello,i = 9
$
我们看下strip都有那些用法。
$ strip --help
Usage: strip <option(s)> in-file(s)
Removes symbols and sections from files
The options are:
-I --input-target=<bfdname> Assume input file is in format <bfdname>
-O --output-target=<bfdname> Create an output file in format <bfdname>
-F --target=<bfdname> Set both input and output format to <bfdname>
-p --preserve-dates Copy modified/access timestamps to the output
-D --enable-deterministic-archives
Produce deterministic output when stripping archives (default)
-U --disable-deterministic-archives
Disable -D behavior
-R --remove-section=<name> Also remove section <name> from the output
--remove-relocations <name> Remove relocations from section <name>
-s Remove all symbol and relocation information
-g -S -d --strip-debug Remove all debugging symbols & sections
--strip-dwo Remove all DWO sections
--strip-unneeded Remove all symbols not needed by relocations
--only-keep-debug Strip everything but the debug information
... #此处省略
那么我们可以看到,常见的有-I和-O,也就是输入和输出啦。发现一个不对的地方,它这里的O应该是小写的,大写的O会报错
然后是 -F format,设置输入和输出文件的格式
-p 保护日期,那么这个应该是不修改原来文件的modified的日期的吧
-D 和-U 需要一起讲,D应该就是它这个deterministic的意思吧,确定性的。那么-D就是产生确定性输出,-U就是不产生确定性输出。
-R 可以删除指定的section
-s 表示可以strip-all。
后面太多了,大家可以自行琢磨
嗯,大概就这些吧。正常使用的strip filename -o output_filename 就应该完全够用。
以上就是本文的全部内容,有什么疑问欢迎来一起探讨。
那么我们来看下加了s之后的文件大小是多少
$ strip hello.out -p -s -o hello.s.out
$ ls -l
total 32
-rw-r--r-- 1 root root 171 Jul 12 3:00 hello.cpp
-rwxr-xr-x 1 root root 8968 Jul 12 3:00 hello.out
-rwxr-xr-x 1 root root 6120 Jul 12 3:00 hello.s.out
-rwxr-xr-x 1 root root 6120 Jul 12 3:10 hello.strip.out
$
哈哈,看来默认就是有-s的了
Linux下的strip命令学习的更多相关文章
- Linux下的upx命令学习
upx学习 今天我们来学习一款给应用加壳的软件,叫做upx(the Ultimate Packer for eXecutables) 首先我们先看下它**百科的释义: UPX (the Ultimat ...
- linux下文件搜索命令学习笔记
1. locate:按照文件名搜索文件 locate filename 与find在整个操作系统中遍历搜索不同,locate命令在/var/lib/mlocate这个后台数据库中按照文件名搜索,所以优 ...
- Linux下使用mail命令发送邮件
因为需要经常备份网站的数据,所以了解并学习了下linux下如何通过shell来发送邮件,这里以CentOS为例,使用mail命令来进行外部邮件的发送.mail命令的语法如下: Usage: mail ...
- Linux下的Make命令实例详解
众所周知在Linux系统下的make 命令是系统管理员和程序员用的最频繁的命令之一.管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题.下面这 篇文章我们将用一 ...
- linux下显示dd命令的进度:
linux下显示dd命令的进度: dd if=/dev/zero of=/tmp/zero.img bs=10M count=100000 想要查看上面的dd命令的执行进度,可以使用下面几种方法: 比 ...
- [转] 关于linux下通过shell命令(自动)修改用户密码
关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自 ...
- linux下安装7z命令及7z命令的使用
本文主要介绍了在linux下安装7z命令的方法,同时介绍了7z命令的使用.7z压缩格式拥有众多优点,具有极高的压缩比率,如果你还不了解,请看文章:7z格式.LZMA压缩算法和7-Zip详细介绍. re ...
- 将linux下的rm命令改造成移动文件至回收站【转】
转自:http://blog.csdn.net/a3470194/article/details/16863803 [-] 将linux下的rm命令改造成移动文件至回收站 将AIX下的rm命令改造成移 ...
- linux下常用FTP命令
linux下常用FTP命令 1. 连接ftp服务器 1. 连接ftp服务器格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1b)服 ...
随机推荐
- AcWing 400. 太鼓达人
大型补档计划 题目链接 神仙题.考虑转为图论模型. 若以 \(2 ^ k\) 个点,相互转化,很容易看出要求一个哈密尔顿环,显然对于 \(1000\) 规模的数据求不出来. 对于图论中环的算法,并且能 ...
- 题解-[ZJOI2005]沼泽鳄鱼
题解-[ZJOI2005]沼泽鳄鱼 前置知识: 邻接矩阵 矩阵乘法 矩阵快速幂 [ZJOI2005]沼泽鳄鱼 给一个有 \(N\) 个点,\(M\) 条双向边的图 \(G\),其中有 \(NFish\ ...
- 题解-Koishi Loves Construction
题解-Koishi Loves Construction 前缀知识 质数 逆元 暴搜 Koishi Loves Construction 给定 \(X\),\(T\) 组测试数据,每次给一个 \(n\ ...
- rsync 参数说明及使用参数笔记好文摘抄
一.前言 最近发现rsync挺好用的--不过参数有点多,所以这儿写一篇给自己以后要用的时候做个参考. 二.参数说明 这儿全是我翻资料连蒙带猜(有些实在是不好解释)翻译出来的,请各位转载的留个名啊,虽然 ...
- MVC部署出现403.14问题记录
1.问题截图 2.解决办法有几种 1)在system.webServer下增加,这种是不推荐的. <modules runAllManagedModulesForAllRequests=&quo ...
- SpringBoot 拦截器和自定义注解判断请求是否合法
应用场景举例: 当不同身份的用户请求一个接口时,用来校验用户某些身份,这样可以对单个字段数据进行精确权限控制,具体看代码注释 自定义注解 /** * 对比请求的用户身份是否符合 * @author l ...
- Docker安装rocketmq踩坑指南
Docker 网络 Docker容器运行的时候有host.bridge.none三种网络可供配置. 默认是bridge,即桥接网络,以桥接模式连接到宿主机:host是宿主网络,即与宿主机共用网络:no ...
- 传输层-Transport Layer(下):UDP与TCP报头解析、TCP滑动窗口、TCP拥塞控制详解
第六章 传输层-Transport Layer(下) 上一篇文章对传输层的寻址方式.功能.以及流量控制方法做了简短的介绍,这一部分将介绍传输层最重要的两个实例:TCP协议和UDP协议,看一看之前描述的 ...
- PCRE正则表达式语法
字符 描述 \ 将下一个字符标记为一个特殊字符,或一个原义字符,或一个向后引用,或一个八进制转义符.例如,"\n"匹配一个换行符. ^ 匹配输入字符串的开始位置. $ 匹配输入字符 ...
- 【opencv】学习笔记
安装 此笔记仅对python36实用 OpenCV装3.4.1.15 指令:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv ...