hsgw (14585) さんが、セキュリティアカデミー勉強会(<http://cakeoff.net/announce/050709.txt>) で発表した istrings (<http://openmya.hacker.jp/hasegawa/>)を、つついてみた。
なんとなく、本業でイッパイイッパイなので、表層的なところだけ。
* <del>抽出文字列中の改行文字が、出力に含まれないようなので</del>改行文字が現れても改行されないようなので
strings(1) と同じように grep(1) などに食わせるのは向かないと思いました。(バグ?)
* map ファイルの指定方法は、以前から悩んでいる旨聞いていましたが、やっぱりあまり使いやすくはないですね。エンコーディング名に引っ掛けてサフィクスを決め打ちするようにしたら、ディレクトリ指定とか使えるようになるかも。
* 日記 (<http://d.hatena.ne.jp/hasegawayosuke/20050710/1121007299#1121007299>) で、Linux 上でもビルドできるはず、とあったので、手元でも試してみた。
cp932.map の作成以外は、動いたので、以下に記録。
makefile (GNU make 用)は、以下のようなのを用意しました。
# Makefile for gmake
PREFIX=/usr/local
TARGET=istrings
LINTFLAGS=-nullasign
INIFILE="$(PREFIX)/etc/istrings.ini"
CFLAGS=-O2 -Wall -DINIFILE=\"$(INIFILE)\"
$(TARGET): istrings.o vstr.o utilstr.o inifile.o mapfile.o dbcs.o debug.o utf16.o utf8.o compati.o
$(CC) $(CFLAGS) -o $@ $^
clean:
rm *.o
rm $(TARGET)
istrings.o: istrings.c istrings.h compati.h vstr.h inifile.h mapfile.h \
utilstr.h debug.h version.h dbcs.h utf16.h utf8.h
vstr.o: vstr.c vstr.h
utilstr.o: utilstr.c utilstr.h
inifile.o: inifile.c istrings.h compati.h vstr.h inifile.h mapfile.h \
utilstr.h debug.h
mapfile.o: mapfile.c istrings.h compati.h vstr.h inifile.h mapfile.h \
utilstr.h debug.h
dbcs.o: dbcs.c istrings.h compati.h vstr.h inifile.h mapfile.h utilstr.h \
dbcs.h debug.h
debug.o: debug.c debug.h
utf16.o: utf16.c istrings.h compati.h vstr.h inifile.h mapfile.h \
utilstr.h utf16.h debug.h
utf8.o: utf8.c istrings.h compati.h vstr.h inifile.h mapfile.h utilstr.h \
utf8.h debug.h
compati.o: compati.c istrings.h compati.h vstr.h inifile.h mapfile.h \
utilstr.h
コンパイルを通すためだけの場当たり的なパッチは、以下のとおり
--- debug.c.orig Wed Jun 22 17:58:26 2005
+++ debug.c Mon Jul 11 19:29:23 2005
@@ -6,7 +6,9 @@
static const char *m_file = NULL;
static int m_line;
-static FILE* m_fp = stderr;
+static FILE* m_fp;
+static void m_fp_construct (void) __attribute__((constructor));
+static void m_fp_cunstruct (void) { m_fp = stderr; }
static int m_debuglevel = 0;
int set_debuglevel( int level )
--- utilstr.c.orig Sat Jun 11 13:53:02 2005
+++ utilstr.c Mon Jul 11 19:29:31 2005
@@ -2,6 +2,7 @@
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
+#include <errno.h>
#include "utilstr.h"
int my_stricmp( const char *s1, const char* s2 )
2005-07-12 12:00+09 追記:
http://archive.openmya.devnull.jp/2005.07/msg00472.html
によると,wakatono さんが,手を入れたそうで,
近々 0.1.1 か 0.2 になるのかな……
2005-07-13 16:20+09 追記:
wakatono 版が公開されました
http://openmya.hacker.jp/hasegawa/istrings/istrings-0.1-wakatono.tar.gz
大まかには,同じような直し方になってるっぽいです。
Re: 葉っぱツールキットと戯れる (スコア:1)
> strings(1) と同じように grep(1) などに食わせるのは向かない
> と思いました。(バグ?)
すいません、いまいち意味がわかりません。
strings では改行文字も文字列の一部として拾ってるってことですか?
Re: 葉っぱツールキットと戯れる (スコア:1)
えっと,そうではなくて
書き方がまずかったですね
というか,正確ではなかったですね
strings(1) では,
「``printable'' な文字以外が現れると改行する」
という処理なので,改行文字が現れても改行されますが
istrings では,単に改行文字を詰めて出力されるみたいなので,
もともと何行もあったものが,実質1行として出力されたり
することになります。
すると,grep(1) してもあまりうれしくなかったりするなぁ,と。
Re: 葉っぱツールキットと戯れる (スコア:1)
Re: 葉っぱツールキットと戯れる (スコア:1)
たとえば
istrings -t -i utf-16le cpconv.exe
とかすると,
strings -el cpconv.exe
と出力結果が異なるんですが。
必要に応じて,出力結果を iconv -f utf-16le -t utf-8 なり wiconv -f 1200 -t 65001 なりするにしても。
Re: 葉っぱツールキットと戯れる (スコア:1)
ぬーん…。改行文字を特別扱いしたつもりはないんだけどなぁ。
Re: 葉っぱツールキットと戯れる (スコア:1)
慌てない,慌てない。