strip简单的说就是给文件脱掉外衣,具体就是从特定文件中剥掉一些符号信息和调试信息,使文件变小。

我们可以在shell中输入man strip来获取strip的些相关信息

STRIP(1)                     GNU Development Tools                    STRIP(1)NAMEstrip - Discard symbols from object files.SYNOPSISstrip [-F bfdname |--target=bfdname][-I bfdname |--input-target=bfdname][-O bfdname |--output-target=bfdname][-s|--strip-all][-S|-g|-d|--strip-debug][--strip-dwo][-K symbolname |--keep-symbol=symbolname][-N symbolname |--strip-symbol=symbolname][-w|--wildcard][-x|--discard-all] [-X |--discard-locals][-R sectionname |--remove-section=sectionname][-o file] [-p|--preserve-dates][-D|--enable-deterministic-archives][-U|--disable-deterministic-archives][--keep-file-symbols][--only-keep-debug][-v |--verbose] [-V|--version][--help] [--info]objfile...DESCRIPTIONGNU strip discards all symbols from object files objfile.  The list ofobject files may include archives.  At least one object file must begiven.strip modifies the files named in its argument, rather than writingmodified copies under different names.

strip 命令减少 XCOFF(Common Object File Format) 对象文件的大小。strip 命令从 XCOFF 对象文件中有选择地除去行号信息、重定位信息、调试段、typchk 段、注释段、文件头以及所有或部分符号表。节省很多空间。特别对于嵌入式来说空间还是比较重要的。

我们可以使用file命令来查看某个文件,如下:

瘦身前大小2856byte,足足节约将近一倍的空间!代价是除去行号信息、重定位信息、调试段、typchk 段、注释段、文件头以及所有或部分符号表。无法进行调试及定位

运行命令进行瘦身,我这是嵌入式 strip 换成 arm-linux-gnueabihf-strip

arm-linux-gnueabihf-strip dump_test

文件大小5984byte

strip不仅仅可以针对可执行文件, 还能针对目标文件和动态库等. 在实际的开发中, 经常需要对动态库.so进行strip操作, 减少占地空间。 而在调试的时候(比如用addr2line), 就需要符号了。 因此, 通常的做法是: strip前的库用来调试, strip后的库用来实际发布, 他们两者有对应关系。 一旦发布的strip后的库出了问题, 就可以找对应的未strip的库来定位。

整体的COFF文件结构体:

The COFF Object Format is used both for object files (.o extension) and executable files.

COFF目标格式既用于中间文件,也用于可执行文件

Some of the information is only present in object files,

一些信息只出现在对象文件中

other information is only present in the executable files.

其他的信息只出现在可执行文件中

Table G-1   COFF file components COFF文件组成

Section  区段名

Description  说明

File header

文件头

Contains general information; always present.

包含一般性的消息, 永远有效

Optional header

扩展头

Contains information about an executable file; usually only present in executables.

包含关于可执行文件的信息, 通常只出现在可执行文件中

Section header

区段头

Contains information about the different COFF sections; one for each section.

包含每个不同的COFF区段信息, 每个区段头对应每个区段

Raw data sections

原始数据区

One for each section containing raw data, such as machine instructions and initialized variables.

每个区段包含的数据, 例如可执行的机器码,和用来初始化变量的数据

Relocation information

重定位信息

Contains information about unresolved references to symbols in other modules;

包含来自其它文件中没有确定地址的符号的信息.

one for each section having external references.

每个区段都有一个外部符号

Usually only present in object files and not in executable files.

通常在目标文件出现而不在可执行文件中出现

Line number information

行号信息

Contains debugging information about source line numbers;

好汉源代码行号的调试信息

one for each section if compiled with the -g option.

如果编译选项含有-g参数,那么每一个区段都含有

Symbol table

符号表

Contains information about all the symbols in the object file;

包含目标文件的所有符号信息

present if not stripped from an executable file.

目标文件都含有, 可执行文件如果没有剔除的话也有

String table

字符串表

Contains long symbol names.

包含一些长过8字节的符号名

#core dump# strip命令相关推荐

  1. Core Dump 核心转储-进程异常分析jmap命令

    Core Dump 核心转储 一.简介 程序运行过程中异常退出定位,查看到程序异常时的所有信息,变量值.栈信息.内存数据,程序异常时的运行位置(甚至记录代码行号)等等 jdk/bin目录下 ./jma ...

  2. linux strip作用,linux gcc strip命令简介

    阅读目录 strip简介 strip经常用来去除目标文件中的一些符号表.调试符号表信息,以减小静态库.动态库和程序的大小. strip支持的选项可通过如下命令查看: strip --help stri ...

  3. linux gcc strip命令简介

    阅读目录 strip简介 strip示例 strip命令用法 程序开发是否要strip 静态库如何strip 参考资料 strip简介 strip经常用来去除目标文件中的一些符号表.调试符号表信息,以 ...

  4. 通过gdb core dump方法查看程序异常时的堆栈信息

    在Linux下可通过core文件来获取当程序异常退出(如异常信号SIGSEGV, SIGABRT等)时的堆栈信息.core dump叫做核心转储,当程序运行过程中发生异常的那一刻的一个内存快照,操作系 ...

  5. Linux上Core Dump文件的形成和分析

    Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core ...

  6. linux系统core dump设置,linux coredump设置

    1. core 在Linux下程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息,编译时需要加上 -g -Wall). 使用gdb来查看core文件,可以指 ...

  7. 学会用core dump调试程序错误(转)

    前言 最近在项目中遇到大型程序出现SIGSEGV ,一直不知道用core dump工具来调试程序,花了近一周的时间,才定位问题,老大很生气,后果很严重,呵呵,事后仔细学习了这块的知识,了解一点core ...

  8. Linux Core Dump

     1. 前言: 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的. 但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们 ...

  9. linux下调试core dump方式汇总,工作必备技能

    缘起 调试,是开发流程中一个非常重要的环节.每个程序员都应,具备调试代码的能力,尤其对于从事 Linux 下的开发的读者. 从事 linux 下后台开发,有时候会遇到程序突然崩溃的情况,也没有任何日志 ...

最新文章

  1. 「小程序JAVA实战」微信开发者工具helloworld(三)
  2. 【python图像处理】彩色映射
  3. 笔记-项目管理基础知识-复习要点
  4. 中文NER任务实验小结:BERT-MRC的再优化
  5. C语言两个字符串查找最长的公共子串的算法(附完整源码)
  6. ajax 中Accordion控件的使用
  7. 新手求大神,有其他swit-case的思路写这个程序么?
  8. 面向.NET开发人员的Dapr——目录
  9. 0限流电阻 stm32_上/下拉电阻
  10. Win11系统添加新用户的方法
  11. 微软企业库4.1学习笔记(三十六)日志模块 简介
  12. python二十四点_python实现24点游戏(地球上最短的24点游戏代码?)
  13. 【C++/Python 双语言实现】Luogu1196 银河英雄传说 + Python函数的定义与调用
  14. python flask倒计时_Flask实践:计时器
  15. 关于IE浏览器无法正常使用的问题
  16. 星计划--Python内置对象之旅(3)(列表)
  17. 使用idea运行CS项目后“客户端页面加载不出来“的解决方法
  18. android 传感器小游戏,重力感应球游戏
  19. 利用Python将图片批量改成任意格式
  20. 职场的1000+篇文章总结

热门文章

  1. sqllite日期操作
  2. pgsql 正则匹配中文字符
  3. 用面向对象编程制作简易烟花圆周运动
  4. 5 年营收超 50 亿美元,「宝可梦」游戏是怎么做到的?
  5. automake生成静态库文件_Automake 详解
  6. HTML+CSS+JS大作业——汽车设备营销企业模板(13页) 静态HTML网页设计模板
  7. JZOJ5945. 【NOIP2018模拟11.02】昆特牌(gwent)
  8. 警惕AI军事化!人工智能可寻找隐藏的核导弹,恐引发全球军备竞赛
  9. 第一次使用putty和vncviewer连接树莓派要注意的坑
  10. 关于vsCode中文插件突然无效的解决办法