0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

strip命令:用于剝掉目標(biāo)文件中一些符號(hào)信息和調(diào)試信息,使文件變小

Linux愛好者 ? 來源:Linux愛好者 ? 作者:戀貓大鯉魚 ? 2021-02-02 11:29 ? 次閱讀

1.命令簡(jiǎn)介

strip 命令是 GNU Binutils 中的一員,用于剝掉目標(biāo)文件中一些符號(hào)信息和調(diào)試信息,使文件變小。

2.命令格式

3.選項(xiàng)說明

[-F bfdname |--target=bfdname]:使用指定的二進(jìn)制文件格式(Binary Format Descriptor)解析輸入的目標(biāo)文件,輸出目標(biāo)文件時(shí)也采用相同的格式
[-I bfdname |--input-target=bfdname]:使用指定的二進(jìn)制文件格式(Binary Format Descriptor)解析輸入的目標(biāo)文件
[-O bfdname |--output-target=bfdname]:使用指定的二進(jìn)制文件格式(Binary Format Descriptor)輸出目標(biāo)文件
[-s|--strip-all]:刪除所有符號(hào)
[-S|-g|-d|--strip-debug]:僅刪除調(diào)試符號(hào)
[--strip-dwo]:刪除所有DWARF .dwo節(jié)的內(nèi)容,保留其余調(diào)試節(jié)和所有符號(hào)不變
[-K symbolname |--keep-symbol=symbolname]:保留源文件中指定的符號(hào)symbolname
[-N symbolname |--strip-symbol=symbolname]:從源文件中刪除符號(hào)symbolname。此選項(xiàng)可能不止一次
[-w|--wildcard]:允許在其他命令行選項(xiàng)中對(duì)符號(hào)名稱使用正則表達(dá)式。問號(hào)(?)、星號(hào)(*)、反斜杠()和方括號(hào)([])運(yùn)算符可以在符號(hào)名的任何位置使用
[-x|--discard-all]:刪除非全局符號(hào)
[-X |--discard-locals]:刪除編譯器生成的本地符號(hào)
[-R sectionname |--remove-section=sectionname]:從輸出文件中刪除名為sectionname的任何節(jié)。此選項(xiàng)可能會(huì)給出多次。請(qǐng)注意,不適當(dāng)?shù)厥褂么诉x項(xiàng)可能會(huì)使輸出文件不可用。通配符*可以在sectionname的末尾給出。如果是這樣,則將刪除以sectionname開頭的任何節(jié)
[-o file]:將剝離的輸出放入文件 file 中,而不是替換現(xiàn)有文件。使用此參數(shù)時(shí),只能指定一個(gè)objfile
[-p|--preserve-dates]:保留文件的訪問和修改日期
[-D|--enable-deterministic-archives]:以確定性模式(deterministic mode)操作。復(fù)制存檔成員和寫入存檔索引時(shí),對(duì)UIDs、GIDs、時(shí)間戳使用零,對(duì)所有文件使用一致的文件模式
[-U|--disable-deterministic-archives]:不以確定性模式(deterministic mode)操作。這與上面的-D選項(xiàng)相反:復(fù)制存檔成員并寫入存檔索引時(shí),使用它們的實(shí)際UID、GID、時(shí)間戳和文件模式值
[--keep-file-symbols]:保留符號(hào)信息
[--only-keep-debug]:保留調(diào)試信息
[-v |--verbose]:詳細(xì)輸出:列出所有修改的對(duì)象文件。對(duì)于歸檔文件,strip-v 列出了歸檔文件的所有成員
[-V|--version]:顯示版本信息
[-h|--help]:顯示幫助信息
[--info]:列出支持的目標(biāo)文件格式和架構(gòu)
 objfile...:目標(biāo)文件,包括庫文件或可執(zhí)行文件

4.常用示例

先看一個(gè) C++ 源碼文件 main.cpp。

//
//@file:main.cpp
//

#include

intmain()
{
std::cout<<"strip"<

使用 g++ 編譯生成可執(zhí)行文件 main.out。

g++-omain.outmain.cpp
ll
-rw-r--r--1rootroot68Mar2215:55main.cpp
-rwxr-xr-x1rootroot9119Mar2215:55main.out

(1)剝掉可執(zhí)行文件中一些符號(hào)信息和調(diào)試信息,使文件變小。

首先使用file命令來查看可執(zhí)行文件main.out的基本信息,可見其是not stripped。

filemain.out
main.out:ELF64-bitLSBexecutable,x86-64,version1(SYSV),dynamicallylinked(usessharedlibs),forGNU/Linux2.6.32,BuildID[sha1]=9d0d7d3718cf9a4cfdc3e026de804e2428bb60fa,notstripped

然后使用 nm 命令來查看 main.out 中的符號(hào)。

nmmain.out
000000000060105cB__bss_start
0000000000601170bcompleted.6337
U__cxa_atexit@@GLIBC_2.2.5
0000000000601058D__data_start
0000000000601058Wdata_start
00000000004007b0tderegister_tm_clones
0000000000400820t__do_global_dtors_aux
0000000000600de8t__do_global_dtors_aux_fini_array_entry
0000000000400978R__dso_handle
0000000000600df8d_DYNAMIC
000000000060105cD_edata
...

使用strip來剝掉main.out中的符號(hào)信息,并查看大小,文件基本信息和符號(hào)信息。

stripmain.out

llmain.out
-rwxr-xr-x1rootroot6272Mar2216:14main.out

filemain.out
main.out:ELF64-bitLSBexecutable,x86-64,version1(SYSV),dynamicallylinked(usessharedlibs),forGNU/Linux2.6.32,BuildID[sha1]=9d0d7d3718cf9a4cfdc3e026de804e2428bb60fa,stripped

nmmain.out
nm:main.out:nosymbols

可見main.out的大小從9119字節(jié)變?yōu)?272字節(jié),且file命令顯示文件狀態(tài)為stripped,使用nm命令顯示main.out已經(jīng)沒有符號(hào)了。

5.小結(jié)

通過上面的例子可以看出,strip 命令可用于剝掉目標(biāo)文件的符號(hào),使文件變小,這就節(jié)省了很多空間。

其實(shí), strip 不僅僅針對(duì)可執(zhí)行文件, 還能針對(duì)目標(biāo)文件和靜態(tài)、動(dòng)態(tài)庫等。在實(shí)際的開發(fā)中, 經(jīng)常需要對(duì)動(dòng)態(tài)庫 .so 進(jìn)行 strip 操作, 減少空間。而在調(diào)試的時(shí)候(比如用 addr2line),就需要符號(hào)了。因此,通常的做法是用 strip 前的庫來調(diào)試,strip 后的庫用來發(fā)布, 發(fā)布的 strip 后的庫一旦出了問題, 就可以找對(duì)應(yīng)的未 strip 的庫來定位。


參考文獻(xiàn)

[1] strip manual
[2] GNU Binutils
[3] linux中的strip命令簡(jiǎn)介

責(zé)任編輯:xj

原文標(biāo)題:每天一個(gè) Linux 命令(104):strip 命令

文章出處:【微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11182

    瀏覽量

    208534
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    669

    瀏覽量

    21958
  • GNU
    GNU
    +關(guān)注

    關(guān)注

    0

    文章

    143

    瀏覽量

    17437

原文標(biāo)題:每天一個(gè) Linux 命令(104):strip 命令

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式學(xué)習(xí)-常見的shell命令文件操作相關(guān)命令

    查找文件里符合條件的字符串參數(shù):grep [選項(xiàng)] 示例: 14、uname列出內(nèi)核信息命令:uname英文全拼:unix name功能:用于顯示系統(tǒng)
    發(fā)表于 08-20 09:40

    常見的shell命令文件操作相關(guān)命令

    將tar.bz2的壓縮包解壓到指定目錄10、ln創(chuàng)建鏈接命令命令:ln英文全拼:link files功能:為某個(gè)文件在另外個(gè)位置建立
    發(fā)表于 08-19 10:01

    恒訊科技分析:香港服務(wù)器的linux如何顯示文件內(nèi)容?

    在Linux系統(tǒng)中查看文件內(nèi)容有多種方法,以下是一些常用的命令: 1、使用cat命令:這是最基本和常用的查看文件內(nèi)容的方法。你可以直接輸入c
    的頭像 發(fā)表于 07-19 12:49 ?181次閱讀

    Linux系統(tǒng)中一些重要的配置文件介紹

    系統(tǒng)文件,用于配置主機(jī)名與 IP 地址的映射關(guān)系。當(dāng)系統(tǒng)需要解析主機(jī)名時(shí),會(huì)首先查找 /etc/hosts 文件,如果在該文件中找到了相應(yīng)的映射關(guān)系,則直接使用對(duì)應(yīng)的 IP 地址進(jìn)行通
    的頭像 發(fā)表于 02-19 17:39 ?3020次閱讀

    如何使用linux下gdb來調(diào)試python程序

    中,我們將介紹如何在Linux中使用GDB來調(diào)試Python程序。 、安裝GDB和Python調(diào)試符號(hào) 在使用GDB調(diào)試Python程序之
    的頭像 發(fā)表于 01-31 10:41 ?2261次閱讀

    《Linux常用命令自學(xué)手冊(cè)》+Linux簡(jiǎn)單指令筆記

    還可以結(jié)合管道符“|”來進(jìn)行一些復(fù)雜的操作。如果不指定File或Directory參數(shù),ls命令顯示當(dāng)前目錄的內(nèi)容。 CP指令: 它的基本語法如下:cp [選項(xiàng)] 源文件 目標(biāo)
    發(fā)表于 01-05 08:44

    常用的大日志文件查詢命令詳解

    最近需要查詢大日志文件的時(shí)候,每次打開vim,cat之類的都會(huì)卡死,但是需要查看符合條件的共有多少行數(shù)據(jù),這顆愁死我了,下面列出一些常用的匹配查詢命令。
    的頭像 發(fā)表于 01-02 11:27 ?813次閱讀

    linux備份文件命令bak

    。 備份文件命令通常使用"cp"或"rsync"命令,但這兩個(gè)命令有些繁瑣,使用起來沒有那么簡(jiǎn)單和方便。因此,我們可以使用自定義的備份文件
    的頭像 發(fā)表于 11-23 10:12 ?2317次閱讀

    linux顯示文件行號(hào)命令

    的前面顯示行號(hào)。如果要顯示特定文件的行號(hào),只需將 filename 替換為您的文件名即可。 除了 cat -n 命令,還有其他一些方法可以顯示文件
    的頭像 發(fā)表于 11-13 16:55 ?1705次閱讀

    linux常用命令及作用

    在Linux系統(tǒng)中,有許多常用的命令,它們可以用于管理文件、目錄、進(jìn)程等。以下是一些常用的命令及它們的作用: ls
    的頭像 發(fā)表于 11-13 16:45 ?746次閱讀

    linux刪除文件命令rm

    在Linux系統(tǒng)中,可以使用rm命令來刪除文件或目錄。該命令的功能是刪除個(gè)目錄中的個(gè)或多個(gè)文件
    的頭像 發(fā)表于 11-13 16:42 ?790次閱讀

    linux解壓gz文件命令

    在Linux系統(tǒng)中,可以使用gzip命令解壓.gz文件。gzip命令用于壓縮和解壓縮文件,使用方法如下: 解壓.gz
    的頭像 發(fā)表于 11-08 14:42 ?5063次閱讀

    linux中查找文件命令

    在Linux中,可以使用以下命令來查找文件: find 命令:可以在指定目錄及其子目錄中查找文件,支持根據(jù)文件名、
    的頭像 發(fā)表于 11-08 14:24 ?1166次閱讀

    linux中刪除文件命令

    在Linux中,可以使用 rm 命令來刪除文件。該命令有多個(gè)參數(shù)和選項(xiàng)可供使用,以根據(jù)不同的情況進(jìn)行文件刪除操作。例如: rm 命令后面跟上
    的頭像 發(fā)表于 11-08 14:11 ?728次閱讀

    STM32F10x中一些專業(yè)術(shù)語解釋

    STM32F10x中一些專業(yè)術(shù)語解釋
    的頭像 發(fā)表于 11-01 16:59 ?483次閱讀