每天一個 Linux 命令:strings 命令

1. 命令簡介

strings 命令是二進制工具集 GNU Binutils 的一員,用於打印文件中可打印字符串,文件可以是文本文件(test.c),但一般用於打印二進制目標文件、庫或可執行文件中的可打印字符。字符串默認至少是 4 個或更多可打印字符的任意序列,可使用選項改變字符串最小長度。

2. 命令格式

nm [-afovV] 
   [-min-len] [-n min-len] [--bytes=min-len]
   [-t radix] [--radix=radix]
   [-e encoding] [--encoding=encoding]
   [-] [--all] [--print-file-name]
   [-T bfdname] [--target=bfdname]
   [-w] [--include-all-whitespace]
   [--help] [--version] file...

3. 選項說明

注意,長選項的參數對於短選項也是必須的。

-a, --all, -
 掃描整個文件而不是隻掃描目標文件初始化和裝載段
-d, --data
 僅打印文件中已初始化、加載的數據段中的字符串,這可能會減少輸出中的垃圾量
-e, --encoding=ENCODING
 選擇字符編碼與字節序。encoding可取值s=7bits的ASCII, S=8bits的Latin1, {b,l}=16bits寬字符大小端編碼, {B,L}=32bits寬字符大小端編碼。其中b,B代表bigendian,l,L代表littleendian
-f,–-print-file-name
 在顯示字符串前先顯示文件名
--help
 顯示幫助信息
-, -n, --bytes=MIN_LEN
 指定可打印字符序列的最小長度,而不是默認的4個字符
-o
 類似 --radix=o
-t, --radix=RADIX
 輸出字符串在文件中的偏移位置,RADIX 可取值 o(octal,八進制)、d(decimal,十進制)或者 x(hexadecimal,十六進制)
-T, --target=BFD_NAME
 指定二進制文件格式
-v, -V, --version
 顯示版本信息
-w, --include-all-whitespace
 默認情況下,Tab 和空格字符包含在字符串中,但其他空白字符除外,比如換行符和回車符等字符不是。-w 使所有的空白字符被認爲是字符串的一部分
@FILE
 從指定的文件 FILE 中讀取命令行選項

4. 常用示例

(1)打印可執行文件中的所有可讀字符串。

strings /bin/ls
/lib64/ld-linux-x86-64.so.2
libselinux.so.1
_ITM_deregisterTMCloneTable
__gmon_start__
_Jv_RegisterClasses
_ITM_registerTMCloneTable
_init
fgetfilecon
freecon
lgetfilecon
...

(2)查看某一個字符串屬於哪個文件。

strings -f * | grep "xxx"

(3)查看 glibc 支持的版本。libc.so.6 是 c 標準庫,而這個標準庫的製作者爲了讓庫的使用者知道該庫兼容哪些版本的標準庫,就在這個庫中定義了一些字符串常量,使用如下命令可以查看向下兼容的版本。

strings /lib64/libc.so.6 | grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE

參考文獻

[1] strings manual

[2] GNU Binutils

轉自:戀貓大鯉魚 

https://dablelv.blog.csdn.net/article/details/89088572

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/JcfOO6i7TB0dnlsUR4Ah5Q