2

ctffind という exe プログラムにデータをフィードするスクリプトを作成しました。exe プログラムは、ログファイルにキャプチャしようとしている画面に大量のデータを出力します。

今使っているのはこちら

my $logout = logfile 
open STDOUT, '>>', "$logout";
open my $PIPE1, '|-', '/opt/ctf/ctffind3_mp.exe' or die $!;

画面に表示されたすべてをログファイルに出力します。

ファイルが期待どおりに表示される場合more $logfile、長さは約 5000 行で、文字列「最終値」を含む約 50 行あります。私の次のステップでgrep "final values" logfileは、ログファイルがバイナリファイルであると考え、機能しない代わりに次のように返します。

Binary file logfile matches

ログファイルが適切にエンコードされるように設定するにはどうすればよいですか? ctffind.exe も実行中にバイナリ ファイルを生成していますが、これは問題の一部ですか?

4

3 に答える 3

3

コメント投稿者の提案のおかげで、問題を解決する 2 つの異なる方法を見つけました。

  1. を に変更できgrep logfileますgrep -a logfile

  2. strings logfile logfile2ログファイルの使用可能なバージョンを作成するために使用できます。

于 2012-09-08T01:43:59.693 に答える
1

ファイルの最初のブロックの Ascii NUL (\000) は、Perl がそのファイルを「バイナリ」ファイルと呼ぶのに十分です。

echo "hello world\000" > myfile
perl -E '$f=shift;open $fh,"<",$f or die;say -e $f && -B $f ? "binary":"text"' myfile
于 2012-09-07T19:55:11.900 に答える
1

ctffind3_mp.exe色の変更、太字、画面のクリアなど、画面の書式設定を行うコードが含まれている可能性があります。これらを排除する方法はいくつかあります。

  • それをパイプすることで、cat -vすべての非印刷可能要素を ASCII 表現に変換できます (たとえば、NUL は になります^@)。
  • テキストから ANSI または VT100 シーケンスを削除するための特定のユーティリティがある場合があります。スーパーユーザーに問い合わせてみてください。
  • プログラムが色、太字などの特別なシーケンスを出力しなくなることを期待して、$TERM(または perl で$ENV{'TERM'}) をに設定してみてください。unknown
于 2012-09-07T21:26:55.920 に答える