使用 grep 找到的字串不輸出文本

使用 grep 找到的字串不輸出文本

我正在(Windows)可執行檔中尋找某些字串。

首先我開始於

grep -a string file

因為它將二進位檔案視為文字檔案。問題是沒有整齊的輸出,換行符偶然發生(當正確的位元組按順序出現時)等。

所以我想我應該使用字串:

strings file | grep -i string

令我驚訝的是,「strings」找不到我使用「grep -a」找到的字串。然而,「字串」的優點在於它可以輸出在新行中找到的所有內容的每一項。

我如何才能兩全其美?這意味著我想真正找到所有內容,並獲得所發現內容的合理輸出。

答案1

找不到strings與您的字串相同的模式很可能是由於strings找到至少 4 個字元長的模式造成的後面跟著一個不可列印的字元。來自man stringsGNU strings

For each file given, GNU strings prints the printable character
sequences that are at least 4 characters long (or the number given
with the options below) and are followed by an unprintable character.

除此之外,strings預設僅掃描目標檔案的初始化和載入部分,這可能會進一步減少輸出的行數。

您可以嘗試-a-n選項來更改該行為:

strings -n 1 -a file | grep -i string

這應該會給你更多的字串,並且可能是你所期望的。

我的可執行檔的輸出差異python

$ strings $(which python) | wc
  31923   68075  474068
$ strings -n 1 $(which python) | wc
 501231  531837 1541204
$ strings -n 1 -a $(which python) | wc
 501398  531995 1541762

答案2

為什麼不:

grep -a string file | strings

strings列印至少 4 個字元長的可列印字元序列。因此,如果您的grep內容少於 4 個字符,則strings首先透過 via 處理將導致它遺失。用於strings -n 1將最小長度設為 1。

相關內容