• R/O
  • SSH
  • HTTPS

l2r: Commit


Commit MetaInfo

Revision10 (tree)
Time2007-05-09 17:52:11
Authornotanpe

Log Message

やっと動いた!

Change Summary

Incremental Difference

--- l2.h (revision 9)
+++ l2.h (revision 10)
@@ -1,29 +1,6 @@
11 #ifndef L2_L2_H
22 #define L2_L2_H
33
4-/*
5- a-z(0-25) + A-Z(26-51) + 0-9(52-61) + .(62) + /(63) + ?(64) = 65
6- 1 2 3 4 5 6
7- 01234567890123456789012345678901234567890123456789012345678901234
8- abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./?
9-*/
10-
11-#define LIST_FILE "l2.txt"
12-#define ERR_FILE "error.txt"
13-#define HIT_FILE "hit-l2.txt"
14-
15-#define MAX_TRIPS 8000 /* ハッシュ値ごとの最大トリップ数 */
16-#define NKIND (0xfff+1) /* ハッシュ値の最大値 */
17-#define L2INDEX( bin ) ((bin & 0xfff0000)>>16) /* ハッシュ値 */
18-
19-struct bintrip {
20- uint64_t btrip;
21- uint64_t bmask;
22-};
23-
24-extern struct bintrip trip[NKIND][MAX_TRIPS];
25-extern unsigned int tripNum[NKIND];
26-
274 void readList( void );
285 void initComm( void );
296 void checkIt( uint64_t bin, unsigned char *key );
--- mty.c (revision 9)
+++ mty.c (revision 10)
@@ -123,6 +123,11 @@
123123 return( 0 );
124124 }
125125
126+#if 0
127+key_set64( &key64, i, okey[i] = key[i], 0, 0x7F );
128+key_set64( &key64, i, key[i], key[i] ^ okey[i], 0 );
129+#endif
130+
126131 /* bitwise key をセット */
127132 static
128133 void
@@ -515,6 +520,8 @@
515520 ALU_BITS * kk + k,
516521 key[0], key[1], key[2], key[3], key[4],
517522 key[5], key[6], key[7], key[8], key[9] );
523+#endif /* DEBUG */
524+#ifdef OLDDEBUG
518525 printf( "%03d : buf %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
519526 ALU_BITS * kk + k,
520527 buf[0], buf[1], buf[2], buf[3], buf[4],
--- README.txt (nonexistent)
+++ README.txt (revision 10)
@@ -0,0 +1,85 @@
1+l2r - 帰ってきた超大量検索実験プログラム
2+
3+1. これは何?
4+
5+ 2003/12 頃に ra8 の数打ちゃ当たる方式をさらに推し進めるべく、大量のターゲッ
6+ トを入れられるトリッパーの実験を行っていました。その時のスレッドはここです。
7+
8+ 超大量検索実験
9+ http://kaze.s41.xrea.com/test/read.cgi/ra8/1072683806/
10+
11+ 七文字版l2の仕様を検討するためのスレ
12+ http://kaze.s41.xrea.com/test/read.cgi/ra8/1073801212/
13+
14+ 超大量検索のために、ターゲットの文字数水増しや全小文字+全大文字+先頭のみ大
15+ 文字への自動展開などの機能を実装していました。
16+
17+ コンセプトは「とりあえずなんでもかんでもターゲットとして放り込んでしまえ」と
18+ いうものでした。そのため、ターゲットとして無効なものは黙って無視、なにも指定し
19+ なければ勝手に展開しまくりなどの仕様にしていました。
20+
21+ いくつかの実験を行った後、超大量検索実験スレの >>107
22+ >しばらく走らせてみたら
23+ >ヒット数はパターン数に比例するという
24+ >ごくあたりまえのつまらん結果になったわけだ
25+ という結論に達し、飽きてしまいました。
26+
27+ そして、2007 年春。「プロジェクト・ナニ屋」に刺激を受けて、l2 を復活させるこ
28+ とにしました。もちろんコア部分は、「まあ、待て屋。」から拝借するかたちで。また
29+ もや「実験プログラム」になっているのは、「Unified Tripper」のための実験だから
30+ です。l2r で実験を行い、それを「Unified Tripper」にフィードバックするのが主目
31+ 的です。
32+
33+2. 使い方
34+
35+ ターゲットは、l2.txt ファイルに記述します。ターゲットとして無効なものが入っ
36+ ていても、黙って無視します。
37+
38+ ターゲットは、少なくとも 6 文字以上必要です。6 文字未満のターゲットは、無視
39+ します。また、6 文字のターゲットについては、7 文字に水増しします。
40+ (例:123456 -> 123456. と 123456/)
41+
42+ 正規表現などは、一切使用できません。
43+
44+ 展開後のターゲット数換算で、100万語ぐらいまで入るように設計しています。入り
45+ きらなかった場合、以下のようなメッセージを出力して死にます。(和良
46+ tripv = <zyuusui>, tripCount = 1350866
47+ trip[11150] overflow.
48+
49+ コメントも書くことができます。コメントには何が書いてあっても無視します。どこの
50+ 依頼分なのかなどのメモを書くためなどに使えます。行の先頭を # にすれば、その行は
51+ まるごとコメントになります。また、半角のスペースやタブ以降も、コメントとみなしま
52+ す。
53+
54+ 何も指定しないと、位置指定なしで記述したまま+全小文字+先頭のみ大文字+全大文
55+ 字に展開します。例えば、NoTanPe と書いた場合、以下の展開になります。
56+ -> NoTanPe (位置指定なし)
57+ -> notanpe (位置指定なし)
58+ -> Notanpe (位置指定なし)
59+ -> NOTANPE (位置指定なし)
60+
61+ 先頭に以下の記号を付加することにより、位置指定や展開の制御も可能です。
62+ @ : 大小固定
63+ ^ : 先頭固定
64+ & : 大小先頭固定
65+
66+ 参考のため、サンプルの l2.txt ファイルを同梱しておきます。
67+
68+ l2.txt ファイルを作成したら、l2r.exe をダブルクリックして下さい。検索を開始し
69+ ます。ヒットしたトリップは、hit-l2.txt ファイルに出力されます。
70+
71+3. 鳥屋様万歳
72+
73+ l2r は、「まあ、待て屋。Rev. 121」をベースに開発しています。面白いおもちゃを
74+ 与えてくれた鳥屋様に無限の感謝を。(和良
75+
76+4. 自分でコンパイルしたい物好きへ
77+
78+ 一応、Cygwin で動作確認した Makefile も付けておきます。足りないファイルは、
79+ 自分で「まあ、待て屋。Rev. 121」から持ってきて下さい。
80+
81+5. 文句のあるヤツはいるか?
82+
83+ 言いたいことがあれば、notanpe@users.sourceforge.jp に送ってこいや!
84+
85+以上
--- l2.txt (nonexistent)
+++ l2.txt (revision 10)
@@ -0,0 +1,16 @@
1+# 先頭に何も付加しないと、位置指定なしで自動展開
2+NoTanPe # -> NoTanPe, notanpe, Notanpe, NOTANPE
3+Nonotan # -> notanpe, Notanpe, NOTANPE
4+
5+# 6 文字のターゲットは、7 文字に水増し
6+DevilX # -> DevilX., DevilX/, devilx., devilx/, Devilx., Devilx/,
7+ # DEVIlX., DEVIlX/
8+
9+# @ を付けると、位置指定なしで展開なし
10+@RKyaoob # RKyaoob 位置指定なし完全一致
11+
12+# ^ を付けると、先頭指定で自動展開
13+^No11111 # -> no11111, No11111, NO11111
14+
15+# & を付けると、先頭指定で展開なし
16+&3SHRUNY # 3SHRUNY 先頭完全一致のみ
--- Makefile (nonexistent)
+++ Makefile (revision 10)
@@ -0,0 +1,34 @@
1+CC = gcc
2+CFLAGS = -O3 -fomit-frame-pointer -Wall
3+DEFS = -DDEBUG=0
4+
5+# SSE2 と MMX の選択 (どちらか片方だけを有効にする)
6+DEFS += -msse2
7+#DEFS += -DUSE_MMX
8+
9+# 速度表示デバッグ
10+#DEFS += -DSPDEBUG
11+
12+# FreeBSD 6.1R だとこれが必要
13+#DEFS += -DUSE_REGPARM
14+
15+# W32
16+DEFS += -mno-cygwin -finput-charset=cp932 -fexec-charset=cp932
17+
18+TARG = l2r.exe
19+OBJS = l2.o triplib.o mty.o crypt64.o cp932.o desconst.o dt4.o translate.o tr64_mmx.o
20+
21+all : $(TARG)
22+
23+.c.o :
24+ $(CC) $(CFLAGS) $(DEFS) -c $<
25+
26+.S.o :
27+ $(CC) $(CFLAGS) $(DEFS) -c $<
28+
29+$(TARG) : $(OBJS)
30+ $(CC) $(CFLAGS) $(DEFS) -o $(TARG) $(OBJS)
31+ strip $(TARG)
32+
33+clean :
34+ rm -f $(OBJS) $(TARG) *.bak
--- l2.c (revision 9)
+++ l2.c (revision 10)
@@ -8,13 +8,38 @@
88 #include <sys/time.h>
99
1010 #include "mtytypes.h"
11+#include "translate.h"
1112
1213 #include "l2.h"
1314 #include "triplib.h"
1415
15-#define LOG_LINE_LEN 100
16+#define MAX_TRIPS 7615 /* ハッシュ値ごとの最大トリップ数 */
17+#define NKIND (0x3fff+1) /* ハッシュ値の最大値 */
18+#define L2INDEX( bin ) ((bin & 0x3fff00000)>>20) /* ハッシュ値 */
19+/*
20+NKIND * MAX_TRIPS <= 128M
21+fffff(20) * 118 = 123731850, 24: 37602 20: 45427 16: 6258 12: 5923 8: 4129
22+0ffff(16) * 1903 = 124713105, 24:363592 20:406040 16:226101 12:216980 8: 27771
23+07fff(15) * 3807 = 124743969, 24:634769 20:769452 16:430397 12:413364 8: 56438
24+03fff(14) * 7615 = 124756545, 24:911322 20:------ 16:------ 12:542854 8:147056
25+00fff(12) * 30460 = 124733700, 24:------ 20:------ 16:------ 12:750796 8:383992
1626
27+0x3fff000000
28+001111 111111 111100 000000 000000 000000
29+4 - 6 文字目
30+???456????
31+1234567???
32+???1234567
33+最低 7 文字
34+*/
35+
36+struct bintrip {
37+ uint64_t btrip;
38+ uint64_t bmask;
39+};
40+
1741 struct bintrip trip[NKIND][MAX_TRIPS];
42+unsigned int tripNum[NKIND];
1843
1944 uint64_t bmask[10] = {
2045 0x000000000000003fULL,
@@ -29,9 +54,13 @@
2954 0x0fc0000000000000ULL
3055 };
3156
32-unsigned int tripNum[NKIND];
3357 unsigned int kind;
3458 unsigned int kindTable[128];
59+
60+#define HIT_FILE "hit-l2.txt"
61+#define LIST_FILE "l2.txt"
62+#define ERR_FILE "error.txt"
63+
3564 FILE *hitFile;
3665 FILE *logFile;
3766 FILE *errFile;
@@ -40,7 +69,7 @@
4069
4170 enum types { ALL, CAP, LEAD, CAPLEAD };
4271
43-static void hit( uint64_t bin, unsigned char *key );
72+static void hit( uint64_t bin, unsigned char *key, uint64_t targ );
4473 static void bin2trip( uint64_t bin, char *trip );
4574 static void trip2bin( uint64_t *bin, char *trip );
4675 static void signalHandler( int sig );
@@ -57,6 +86,21 @@
5786 static void hashCheck();
5887 #endif /* HASHCHECK */
5988
89+
90+/*
91+ 1 2 3 4 5 6
92+ 01234567890123456789012345678901234567890123456789012345678901234
93+ ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz?
94+ . : 000000
95+ / : 000001
96+ 0 : 000010
97+ 9 : 001011
98+ A : 001100
99+ Z : 100101
100+ a : 100110
101+ z : 111111
102+ ? : 1000000
103+*/
60104 static unsigned const char bit2char[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
61105
62106 unsigned int tripCount;
@@ -105,8 +149,12 @@
105149 */
106150 *bin = 0;
107151 for ( i = strlen( trip ) - 1; i >= 0; i-- ) {
108- for ( j = 0; bit2char[j] != '\0'; j++ ) {
109- if ( trip[i] == bit2char[j] ) break;
152+ if ( trip[i] == '?' ) {
153+ j = 0;
154+ } else {
155+ for ( j = 0; bit2char[j] != '\0'; j++ ) {
156+ if ( trip[i] == bit2char[j] ) break;
157+ }
110158 }
111159 *bin <<= 6;
112160 *bin |= j;
@@ -144,18 +192,19 @@
144192
145193 static
146194 void
147-hit( bin, key )
195+hit( bin, key, targ )
148196 uint64_t bin;
149197 unsigned char *key;
198+uint64_t targ;
150199 {
151- unsigned char res[30], tmpKey[30];
200+ unsigned char res[30], tres[30], tmpKey[30];
152201
153202 bin2trip( bin, res );
203+ bin2trip( targ, tres );
154204 memcpy( tmpKey, key, 30 );
155205 translate( tmpKey, 0, 1 );
156206
157- putchar( '\n' );
158- printf( "◆%s : #%s\n", res, tmpKey );
207+ printf( "◆%s : #%s (%s)\n", res, tmpKey, tres );
159208 fprintf( hitFile, "◆%s : #%s\n", res, tmpKey );
160209 fflush( stdout );
161210 fflush( hitFile );
@@ -172,7 +221,7 @@
172221 unsigned int i;
173222 char tripChars[] = "abcdefghijklmnopqrstuvwxyz"
174223 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
175- "0123456789./";
224+ "0123456789./?";
176225 char specialChars[] = ".26AEIMQUYcgkosw";
177226
178227 if ( tripLen > 10 ) {
@@ -371,11 +420,6 @@
371420 sprintf( lead2, "???%s%s", lead, delms );
372421 sprintf( upper2, "???%s%s", upper, delms );
373422 mkvarSub( org, lower2, lead2, upper2, vtype );
374- sprintf( org, "???%s%s", delms, tmpTrip );
375- sprintf( lower2, "???%s%s", delms, lower );
376- sprintf( lead2, "???%s%s", delms, lead );
377- sprintf( upper2, "???%s%s", delms, upper );
378- mkvarSub( org, lower2, lead2, upper2, vtype );
379423 }
380424 }
381425 }
@@ -489,10 +533,10 @@
489533 mkvarSub( org, lower2, lead2, upper2, vtype );
490534 }
491535 break;
492- #ifdef NOTDEF
493536 case 6:
494537 mkvarSub2( tmpTrip, lower, lead, upper, vtype, 1 );
495538 break;
539+ #ifdef NOTDEF
496540 case 5:
497541 mkvarSub2( tmpTrip, lower, lead, upper, vtype, 2 );
498542 break;
@@ -604,20 +648,13 @@
604648 unsigned char *key;
605649 {
606650 int i;
607- unsigned int kind;
651+ unsigned long kind;
608652
609653 kind = L2INDEX( bin );
610654 for ( i = 0; i < tripNum[kind]; i++ ) {
611655 if ( ((bin&trip[kind][i].bmask) == trip[kind][i].btrip) ) {
612- hit( bin, key );
656+ hit( bin, key, trip[kind][i].btrip );
613657 return;
614658 }
615659 }
616- kind = 64;
617- for ( i = 0; i < tripNum[kind]; i++ ) {
618- if ( ((bin&trip[kind][i].bmask) == trip[kind][i].btrip) ) {
619- hit( bin, key );
620- return;
621- }
622- }
623660 }
Show on old repository browser