linux中的strings命令


 strings - print the strings of printable characters in files.  
 
       意思是, 打印文件中可打印的字符。  我來補充一下吧, 這個文件可以是文本文件(test.c), 可執行文件(test),  動態鏈接庫(test.o), 靜態鏈接庫(test.a)

在對象文件或二進制文件中查找可打印的字符串。

語法
strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [ File ... ]

描述

strings 命令在對象文件或二進制文件中查找可打印的字符串。字符串是 4 個或更多可打印字符的任意序列,以換行符或空字符結束。 strings 命令對識別隨機對象文件很有用。


標志

-a 或 - 搜索整個文件,而不僅僅是數據段,以尋找可打印的字符串。如果省略這個標志,則 strings 命令只在對象文件的初始化數據空間內尋找。
-n Number 指定最小的字符串長度(除了缺省的 4 個字符以外)。字符串長度的最大值是 4096。這個標志與 -Number 標志相同。
-o 列出文件中每個跟隨在其八進制偏移量之后的字符串。這個標志與 -t o 標志相同。
-t Format 列出從文件最開始起,每個跟隨在其偏移量之后的字符串。該格式取決於用作 Format 變量的字符。
d
以十進制寫下偏移量。
o
以八進制寫下偏移量。
x
以十六進制寫下偏移量。
 

注:當 -o 和 -t Format 標志在一個命令行上多次定義,則最后指定的標志控制 strings 命令的行為。
-Number 指定最小的字符串長度(除了缺省的 4 個字符以外)。字符串長度的最大值是 4096。這個標志與 -n Number 標志相同。
File 要搜索的二進制文件或對象文件。

退出狀態

該命令返回以下退出值:


0 表示命令成功運行。
>0 表示出錯。

示例
要搜索文件,請輸入:
 

strings strings
strings 命令顯示:

@(#)56
1.17 com/cmd/scan/strings.c, cdmscan, bos320 5/7/92 10:21:20
標准輸入
strings.cat
/usr/mbin/strings
Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
%7o
%7d
%7x
%7o
%7d
要搜索至少有 12 個字符的字符串,請輸入:
 

strings -12 strings
strings 命令顯示:

1.17 com/cmd/scan/strings.c, cdmscan, bos320 5/7/92 10:21:20
標准輸入
/usr/mbin/strings
Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
要搜索至少有 20 個字符的字符串,並以十六進制來顯示偏移量,請輸入:
 

strings -t x -n 20 strings
strings 命令顯示:

1017 1.17 com/cmd/scan/strings.c, cmdscan, bos320 5/7/92 10:21:20
108c Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
10d8 Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
1124 Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
1170 Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
11bc Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]

 strings命令很簡單, 看起來好像沒什么, 但實際有很多用途。 下面, 我來舉一個例子。  在大型的軟件開發中, 假設有100個.c/.cpp文件, 這個.cpp文件最終生成10個.so庫, 那么怎樣才能快速知道某個.c/.cpp文件編譯到那個.so庫中去了呢? 當然, 你可能要說, 看makefile不就知道了。 對, 看makefile肯定可以, 但如下方法更好, 直接用命令:
      strings -f "*.so" | grep "xxxxxx"
 
      如果還不明白, 那就就以上面的小程序為例為說明, 不過, 此處我們考慮所有的文件, 如下:
1 [taoge@localhost learn_c]$ strings -f * | grep "my dear"
2 a.out: oh, my dear, c is %d
3 test.c:     printf("oh, my dear, c is %d\n", c);
4 [taoge@localhost learn_c]$ 
可以看到, 源文件test.c和可執行文件中皆有"my dear"串, 一下子就找到了對應的文件,清楚了吧。如果某.c/.cpp文件編譯進了.so庫, 那么,strings -f * | grep "my dear"必定可以找到對應的.so文件, 其中"my dear"為該.c/.cpp文件中的某個日志串(比如以printf為打印)。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM