要檢視二進位制檔案或資料檔案中的文字嗎?Linux strings命令為您提取那些稱為“strings”的文字。
Linux充滿了看起來像是解決問題的解決方案的命令。絃樂司令部肯定屬於那個陣營。它的目的是什麼?是否有指向列出二進位制檔案中可列印字串的命令的點?
讓我們後退一步。諸如程式檔案之類的二進位制檔案可以包含人類可讀文字的字串。但是你怎麼才能看到他們呢?如果你使用cat或更少,你很可能會以一個懸掛終端視窗結束。如果將不可列印的字元輸入到文字檔案中,則設計用於處理文字檔案的程式無法很好地處理這些檔案。
二進位制檔案中的大部分位元組不是人類可讀的,不能以任何有意義的方式列印到終端視窗。沒有與字母數字字元、標點符號或空格不對應的字元或標準符號來表示二進位制值。這些字元統稱為“可列印”字元。其餘為“不可列印”字元。
因此,試圖在二進位制檔案或資料檔案中檢視或搜尋文字字串是一個問題。這就是弦的作用。它從檔案中提取可列印字元的字串,以便其他命令可以使用這些字串,而不必與不可列印字元競爭。
strings命令並不複雜,它的基本用法非常簡單。我們在命令列中提供希望字串搜尋的檔名。
在這裡,我們將在一個二進位制檔案上使用字串,一個叫做“jibber”的可執行檔案。
strings jibber字串從檔案中提取並在終端視窗中列出。
預設情況下,字串將搜尋四個字元或更長的字串。要設定更長或更短的最小長度,請使用-n(最小長度)選項。
注意,最小長度越短,你看到更多垃圾的機率就越高。
某些二進位制值與表示可列印字元的值具有相同的數值。如果其中兩個數值恰好並排出現在檔案中,並且您指定的最小長度為2,那麼這些位元組將被報告為一個字串。
要要求字串使用2作為最小長度,請使用以下命令。
strings -n 2 jibber我們現在有兩個字母字串包含在結果中。請注意,空格被計算為可列印字元。
由於字串輸出的長度,我們將透過更少的管道。然後我們可以在檔案中滾動查詢感興趣的文字。
strings jibber | less清單現在以較少的形式呈現給我們,首先顯示清單的頂部。
通常,程式原始碼檔案被編譯成目標檔案。這些檔案與庫檔案連結以建立二進位制可執行檔案。我們手頭有jibber物件檔案,所以讓我們看看這個檔案。請注意“.o”副檔名。
jibber.o | less如果第一組字串的長度超過8個字元,則它們將全部包裝在第8列。如果它們已被包裝,則第九列中有一個“H”字元。您可以將這些字串識別為SQL語句。
滾動輸出會發現檔案中沒有使用這種格式。
有趣的是,可以看到目標檔案和完成的可執行檔案之間文字字串的差異。
編譯程式內部有不同的區域用於儲存文字。預設情況下,字串搜尋整個檔案以查詢文字。這就像您使用了-a(all)選項一樣。要使字串只在檔案中已初始化、已載入的資料節中搜索,請使用-d(data)選項。
strings -d jibber | less除非您有充分的理由這樣做,否則最好使用預設設定並搜尋整個檔案。
我們可以讓字串列印從每個字串所在的檔案開始的偏移量。為此,請使用-o(offset)選項。
strings -o parse_phrases | less偏移量以八進位制表示。
要以不同的數字基(如十進位制或十六進位制)顯示偏移量,請使用-t(基數)選項。基數選項必須後跟d(十進位制)、x(十六進位制)或o(八進位制)。使用-to和使用-o是一樣的。
strings -t d parse_phrases | less偏移量現在以十進位制列印。
strings -t x parse_phrases | less偏移量現在以十六進位制列印。
字串將製表符和空格字元視為它找到的字串的一部分。其他空白字元(如換行符和回車符)不會被視為字串的一部分。-w(whitespace)選項使字串將所有空白字元視為字串的一部分。
strings -w add_data | less我們可以看到輸出中的空白行,這是第二行結尾的(不可見)回車符和換行符的結果。
我們可以將字串用於任何可以產生位元組流的東西。
透過這個命令,我們可以檢視計算機的隨機存取儲存器(RAM)。
我們需要使用sudo,因為我們正在訪問/dev/mem。這是一個字元裝置檔案,其中包含計算機主記憶體的影象。
sudo strings /dev/mem | less清單並不是RAM的全部內容。它只是可以從中提取的字串。
相關:在Linux中,“一切都是檔案”是什麼意思?
萬用字元可用於選擇要搜尋的檔案組。*字元表示多個字元,而?字元表示任何單個字元。您還可以選擇在命令列中提供許多檔名。
我們將使用萬用字元搜尋/bin目錄中的所有可執行檔案。因為清單將包含許多檔案的結果,所以我們將使用-f(filename)選項。這將列印每行開頭的檔名。然後我們可以看到每個字串在哪個檔案中找到。
我們正在透過grep管道傳輸結果,並尋找包含“Copyright”一詞的字串
strings -f /bin/* | grep Copyright我們得到了/bin目錄中每個檔案的版權宣告的整潔列表,檔名位於每行的開頭。
字串並不神祕;它是一個典型的Linux命令。它做了一些非常具體的事情,做得非常好。
它是Linux的另一個核心,當它與其他命令一起工作時,它就真正地出現了。當您看到它如何位於二進位制檔案和其他工具(如grep)之間時,您就開始瞭解這個稍微晦澀難懂的命令的功能了。
...這些服務提供了一個集中的目錄。在本文中,我們將學習如何實現一個伺服器來公開物件,以及如何實現一個客戶端來呼叫伺服器上的方法,以及如何在RMI登錄檔中註冊和查詢服務。 ...
... 在本文中,我將向您展示如何在Linux上安裝、執行和使用PowerShell! ...
... 在這裡,您將瞭解什麼是crontab,如何新增自動化作業,以及一些實際示例。 ...
Linux seq命令可以在眨眼之間生成數字列表。但是如何將這個功能付諸實際使用呢?我們將向您展示seq如何為您帶來便利。 seq命令 乍一看,Linux seq命令似乎有些奇怪。它可以讓你快速生成數字序列,就這樣!不過,這裡的關鍵...
...。檔案裡有一大堆馬廄,可以幫你分析。我們將向您展示如何使用這些工具。 識別檔案型別 檔案通常具有一些特性,允許軟體包識別它是哪種型別的檔案,以及其中的資料表示什麼。嘗試在MP3音樂播放器中開啟PNG檔案是沒有...