Mercurial > hg > dmlib
annotate tools/fanalyze.c @ 2298:b5abfff07ca9
Add new DMGrowBuf helper functions dmGrowBufCopyOffsSize() and
dmGrowBufConstCopyOffsSize().
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 04 Jul 2019 10:54:16 +0300 |
parents | 180604abb65a |
children | 36edd316184a |
rev | line source |
---|---|
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
2234 | 2 * Fanalyze - Commandline tool for analyzing similarities between multiple files |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 * Programmed and designed by Matti 'ccr' Hamalainen |
2232
ba639902d57c
Bump copyright and version.
Matti Hamalainen <ccr@tnsp.org>
parents:
2229
diff
changeset
|
4 * (C) Copyright 2018-2019 Tecnic Software productions (TNSP) |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 * |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 * Please read file 'COPYING' for information on license and distribution. |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 */ |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
8 #include "dmtool.h" |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
9 #include "dmlib.h" |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
10 #include "dmargs.h" |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 #include "dmfile.h" |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
12 |
2269 | 13 #define SET_MAX_FILES 64 |
14 #define SET_MAX_ELEMS 256 | |
2268
f2ff364065eb
Add constant define for maximum number of variants.
Matti Hamalainen <ccr@tnsp.org>
parents:
2267
diff
changeset
|
15 #define SET_MAX_VARIANTS 4 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
16 |
2269 | 17 #define SET_MAX_GREP_VALUES 64 |
18 #define SET_MAX_GREP_LIST 64 | |
19 | |
20 #define SET_MAX_SEQUENCES 1024 | |
21 #define SET_MAX_PLACES 1024 | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
22 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
23 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
24 /* Typedefs |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
25 */ |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
26 typedef struct |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
27 { |
1996 | 28 Uint8 stats[SET_MAX_ELEMS]; |
29 Uint8 variants, data; | |
2268
f2ff364065eb
Add constant define for maximum number of variants.
Matti Hamalainen <ccr@tnsp.org>
parents:
2267
diff
changeset
|
30 int interest[SET_MAX_VARIANTS]; |
f2ff364065eb
Add constant define for maximum number of variants.
Matti Hamalainen <ccr@tnsp.org>
parents:
2267
diff
changeset
|
31 int interestF[SET_MAX_VARIANTS]; |
1996 | 32 } DMCompElem; |
33 | |
34 | |
35 typedef struct | |
36 { | |
37 int count; | |
38 Uint8 value; | |
39 } DMStatValue; | |
40 | |
41 | |
42 typedef struct | |
43 { | |
44 DMStatValue cv[SET_MAX_ELEMS]; | |
45 } DMStats; | |
46 | |
47 | |
48 typedef struct | |
49 { | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
50 char *filename; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
51 Uint8 *data; |
2249 | 52 size_t size; |
1996 | 53 DMStats stats; |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
54 BOOL analyzed; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
55 } DMSourceFile; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
56 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
57 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
58 typedef struct |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
59 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
60 DMSourceFile *file; // pointer to file struct where match was found |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
61 size_t offs; // offset to match in file data |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
62 } DMMatchPlace; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
63 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
64 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
65 typedef struct |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
66 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
67 size_t len; // length of the matching sequence |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
68 Uint8 *data; // "const" pointer to data in one file, don't free() |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
69 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
70 int nfiles; // number of separate files match was found |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
71 int nplaces; // number of places where match was found |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
72 DMMatchPlace places[SET_MAX_PLACES]; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
73 } DMMatchSeq; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
74 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
75 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
76 enum |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
77 { |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
78 DMGV_UINT8 = 0, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
79 DMGV_UINT16_LE, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
80 DMGV_UINT16_BE, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
81 DMGV_UINT32_LE, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
82 DMGV_UINT32_BE, |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
83 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
84 DMGV_last |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
85 }; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
86 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
87 |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
88 enum |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
89 { |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
90 DMGS_HEX = 0, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
91 DMGS_DEC, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
92 DMGS_last |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
93 }; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
94 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
95 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
96 typedef struct |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
97 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
98 int type; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
99 int disp; |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
100 int nvalues; |
2269 | 101 Uint32 values[SET_MAX_GREP_LIST]; |
102 BOOL vwildcards[SET_MAX_GREP_LIST]; | |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
103 } DMGrepValue; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
104 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
105 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
106 typedef struct |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
107 { |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
108 char *name; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
109 Uint32 nmax; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
110 unsigned int bsize; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
111 } DMGrepType; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
112 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
113 |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
114 static const DMGrepType dmGrepTypes[DMGV_last] = |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
115 { |
2040
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
116 { "8bit (byte)" , (1ULL << 8) - 1, 1 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
117 { "16bit (word) LE" , (1ULL << 16) - 1, 2 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
118 { "16bit (word) BE" , (1ULL << 16) - 1, 2 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
119 { "32bit (word) LE" , (1ULL << 32) - 1, 4 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
120 { "32bit (word) BE" , (1ULL << 32) - 1, 4 }, |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
121 }; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
122 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
123 |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
124 typedef struct |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
125 { |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
126 char *name; |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
127 char *fmtPrefix; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
128 char *fmt; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
129 } DMGrepDisp; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
130 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
131 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
132 static const DMGrepDisp dmGrepDisp[DMGS_last] = |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
133 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
134 { "hex", "0", "x" }, |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
135 { "dec", "" , "d" }, |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
136 }; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
137 |
2249 | 138 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
139 enum |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
140 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
141 FA_ANALYZE, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
142 FA_GREP, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
143 FA_OFFSET, |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
144 FA_MATCHES, |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
145 }; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
146 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
147 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
148 /* Global variables |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
149 */ |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
150 int setMode = FA_ANALYZE; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
151 int nsrcFiles = 0; // Number of source files |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
152 DMSourceFile srcFiles[SET_MAX_FILES]; // Source file names |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
153 DMStats totalStats; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
154 int nsetGrepValues = 0; |
2269 | 155 DMGrepValue setGrepValues[SET_MAX_GREP_VALUES]; |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
156 size_t optMinMatchLen = 8; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
157 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
158 DMMatchSeq dmSequences[SET_MAX_SEQUENCES]; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
159 int ndmSequences = 0; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
160 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
161 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
162 /* Arguments |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
163 */ |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
164 static const DMOptArg optList[] = |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
165 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
166 { 0, '?', "help", "Show this help", OPT_NONE }, |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
167 { 1, 'v', "verbose", "Be more verbose", OPT_NONE }, |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
168 { 2, 'g', "grep", "Binary grep <val>[,<val2>...][:<le|be>[8|16|32]]", OPT_ARGREQ }, |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
169 { 3, 'o', "offset", "Show data in offset <offs>[,<offs2>...][:<le|be>[8|16|32][d|x]]", OPT_ARGREQ }, |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
170 { 4, 'm', "match", "Find matching sequences minimum of <n> bytes long", OPT_NONE }, |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
171 { 5, 'n', "minmatch", "Minimum match sequence length", OPT_ARGREQ }, |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
172 }; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
173 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
174 static const int optListN = sizeof(optList) / sizeof(optList[0]); |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
175 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
176 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
177 void argShowHelp() |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
178 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
179 dmPrintBanner(stdout, dmProgName, "[options] <input file #1> <input file #2> [...]"); |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
180 dmArgsPrintHelp(stdout, optList, optListN, 0); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
181 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
182 fprintf(stdout, |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
183 "\n" |
2234 | 184 "Fanalyze is a simplistic commandline tool to assist analysis of similarities\n" |
185 "between multiple files of same format (but different content). It provides\n" | |
186 "automatic analysis (default operating mode), binary grep functionality (-g)\n" | |
187 "and offset data display (-o)\n" | |
188 "\n" | |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
189 "Value lists for grep function can contain wildcard '?' (or '#') which\n" |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
190 "matches any value of the specified (or inferred) type. For example:\n" |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
191 "-g 0x0f,7,5,?,5,?,? will match sequence of bytes 0f 07 05 ?? 05 ?? ??\n" |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
192 "and -g 0xe,0x1001,?,2023:le16 will match le16 value 000e 1001 ???? 07e7\n" |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
193 "\n" |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
194 "NOTICE! Matching sequences search (-m) is considered unfinished and\n" |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
195 "under development.\n" |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
196 ); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
197 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
198 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
199 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
200 BOOL dmGetData(const int type, const DMSourceFile *file, const size_t offs, Uint32 *mval) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
201 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
202 Uint8 *data = file->data + offs; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
203 if (offs + dmGrepTypes[type].bsize >= file->size) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
204 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
205 *mval = 0; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
206 return FALSE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
207 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
208 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
209 switch (type) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
210 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
211 case DMGV_UINT8: |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
212 *mval = *((Uint8 *) data); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
213 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
214 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
215 case DMGV_UINT16_LE: |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
216 *mval = DM_LE16_TO_NATIVE(*((Uint16 *) data)); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
217 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
218 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
219 case DMGV_UINT16_BE: |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
220 *mval = DM_BE16_TO_NATIVE(*((Uint16 *) data)); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
221 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
222 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
223 case DMGV_UINT32_LE: |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
224 *mval = DM_LE32_TO_NATIVE(*((Uint32 *) data)); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
225 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
226 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
227 case DMGV_UINT32_BE: |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
228 *mval = DM_BE32_TO_NATIVE(*((Uint32 *) data)); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
229 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
230 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
231 default: |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
232 *mval = 0; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
233 return FALSE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
234 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
235 return TRUE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
236 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
237 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
238 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
239 void dmPrintGrepValueList(const DMGrepValue *node, const BOOL match, DMSourceFile *file, const size_t offs) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
240 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
241 char mfmt[16]; |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
242 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
243 snprintf(mfmt, sizeof(mfmt), "%%%s%d%s%%s", |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
244 dmGrepDisp[node->disp].fmtPrefix, |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
245 dmGrepTypes[node->type].bsize * 2, |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
246 dmGrepDisp[node->disp].fmt); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
247 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
248 for (int n = 0; n < node->nvalues; n++) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
249 { |
2248 | 250 const char *veol = (n + 1 < node->nvalues) ? " " : "\n"; |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
251 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
252 if (match) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
253 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
254 Uint32 mval; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
255 dmGetData(node->type, file, offs + n, &mval); |
2290
180604abb65a
Always print out grep value list.
Matti Hamalainen <ccr@tnsp.org>
parents:
2284
diff
changeset
|
256 printf(mfmt, mval, veol); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
257 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
258 else |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
259 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
260 if (node->vwildcards[n]) |
2290
180604abb65a
Always print out grep value list.
Matti Hamalainen <ccr@tnsp.org>
parents:
2284
diff
changeset
|
261 printf("?%s", veol); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
262 else |
2290
180604abb65a
Always print out grep value list.
Matti Hamalainen <ccr@tnsp.org>
parents:
2284
diff
changeset
|
263 printf(mfmt, node->values[n], veol); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
264 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
265 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
266 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
267 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
268 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
269 int argParseGrepValue(const char *arg, const int mode) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
270 { |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
271 const char *specsep = strchr(arg, ':'); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
272 char *vspec, *vstr, *vsep; |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
273 DMGrepValue val; |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
274 int ret = DMERR_OK; |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
275 BOOL more; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
276 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
277 memset(&val, 0, sizeof(val)); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
278 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
279 if (setMode != FA_ANALYZE && setMode != mode) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
280 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
281 dmErrorMsg("Options specifying multiple operating modes can't be used.\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
282 return DMERR_INVALID_ARGS; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
283 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
284 setMode = mode; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
285 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
286 // Do we have spec? |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
287 if (specsep != NULL) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
288 { |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
289 vspec = dm_strdup_trim(specsep + 1, DM_TRIM_BOTH); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
290 vstr = dm_strndup_trim(arg, specsep - arg, DM_TRIM_BOTH); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
291 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
292 else |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
293 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
294 vspec = NULL; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
295 vstr = dm_strdup(arg); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
296 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
297 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
298 // Parse spec if any |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
299 if (vspec != NULL) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
300 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
301 BOOL vendianess = TRUE; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
302 char *vtmp = vspec; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
303 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
304 // Get endianess specifier, if any |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
305 if (dm_strncasecmp(vtmp, "le", 2) == 0) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
306 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
307 vendianess = TRUE; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
308 vtmp += 2; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
309 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
310 else |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
311 if (dm_strncasecmp(vtmp, "be", 2) == 0) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
312 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
313 vendianess = FALSE; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
314 vtmp += 2; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
315 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
316 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
317 // Get value bit size |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
318 if (strncmp(vtmp, "8", 1) == 0) |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
319 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
320 val.type = DMGV_UINT8; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
321 vtmp += 1; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
322 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
323 else |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
324 if (strncmp(vtmp, "16", 2) == 0) |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
325 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
326 val.type = vendianess ? DMGV_UINT16_LE : DMGV_UINT16_BE; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
327 vtmp += 2; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
328 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
329 else |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
330 if (strncmp(vtmp, "32", 2) == 0) |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
331 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
332 val.type = vendianess ? DMGV_UINT32_LE : DMGV_UINT32_BE; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
333 vtmp += 2; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
334 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
335 else |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
336 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
337 ret = dmError(DMERR_INVALID_ARGS, |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
338 "Invalid grep type '%s'.\n", |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
339 vspec); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
340 goto out; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
341 } |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
342 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
343 switch (tolower(*vtmp)) |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
344 { |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
345 case 'd': |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
346 val.disp = DMGS_DEC; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
347 break; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
348 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
349 case 'x': case 'h': |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
350 val.disp = DMGS_HEX; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
351 break; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
352 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
353 case 0: |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
354 break; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
355 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
356 default: |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
357 ret = dmError(DMERR_INVALID_ARGS, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
358 "Invalid grep view type '%s'.\n", |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
359 vspec); |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
360 goto out; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
361 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
362 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
363 |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
364 // Get list of values |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
365 char *vtmp = vstr; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
366 do |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
367 { |
2269 | 368 if (val.nvalues >= SET_MAX_GREP_LIST) |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
369 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
370 ret = dmError(DMERR_BOUNDS, |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
371 "Too many greplist values specified '%s'.\n", |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
372 vstr); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
373 goto out; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
374 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
375 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
376 if ((vsep = strchr(vtmp, ',')) != NULL) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
377 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
378 *vsep = 0; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
379 more = TRUE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
380 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
381 else |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
382 more = FALSE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
383 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
384 if (vtmp[0] == '#' || vtmp[0] == '?') |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
385 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
386 val.vwildcards[val.nvalues] = TRUE; |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
387 if (mode == FA_OFFSET) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
388 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
389 ret = dmError(DMERR_INVALID_ARGS, |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
390 "Offset mode does not allow wildcard values.\n"); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
391 goto out; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
392 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
393 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
394 else |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
395 if (!dmGetIntVal(vtmp, &val.values[val.nvalues], NULL)) |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
396 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
397 ret = dmError(DMERR_INVALID_ARGS, |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
398 "Not a valid integer value '%s'.\n", |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
399 vtmp); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
400 goto out; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
401 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
402 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
403 val.nvalues++; |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
404 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
405 if (more) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
406 vtmp = vsep + 1; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
407 } while (more); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
408 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
409 if (val.vwildcards[0]) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
410 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
411 ret = dmError(DMERR_INVALID_ARGS, |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
412 "First grep value can not be a wildcard.\n"); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
413 goto out; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
414 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
415 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
416 if (mode == FA_GREP) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
417 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
418 // Check if we need to guess size |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
419 if (val.type < 0) |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
420 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
421 for (int n = DMGV_last; n >= 0; n--) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
422 { |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
423 const DMGrepType *def = &dmGrepTypes[n]; |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
424 if (val.values[0] <= def->nmax) |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
425 val.type = n; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
426 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
427 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
428 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
429 if (val.type < 0) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
430 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
431 ret = dmError(DMERR_INVALID_ARGS, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
432 "Could not guess value type for '%s'.\n", |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
433 arg); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
434 goto out; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
435 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
436 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
437 // Check range |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
438 for (int n = 0; n < val.nvalues; n++) |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
439 if (!val.vwildcards[n] && val.values[n] > dmGrepTypes[val.type].nmax) |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
440 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
441 ret = dmError(DMERR_INVALID_ARGS, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
442 "Integer value %d <= %d <= %d out of range for type %s.\n", |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
443 val.values[n], 0, dmGrepTypes[val.type].nmax, |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
444 dmGrepTypes[val.type].name); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
445 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
446 goto out; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
447 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
448 } |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
449 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
450 if (mode == FA_OFFSET) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
451 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
452 if (val.type < 0) |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
453 val.type = DMGV_UINT8; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
454 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
455 |
2269 | 456 if (nsetGrepValues < SET_MAX_GREP_VALUES) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
457 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
458 DMGrepValue *node = &setGrepValues[nsetGrepValues++]; |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
459 memcpy(node, &val, sizeof(val)); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
460 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
461 if (mode == FA_GREP) |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
462 { |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
463 dmPrint(1, "Grep %s: ", |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
464 dmGrepTypes[val.type].name); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
465 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
466 dmPrintGrepValueList(node, FALSE, NULL, 0); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
467 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
468 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
469 else |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
470 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
471 ret = dmError(DMERR_BOUNDS, |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
472 "Too many values specified (max %d).", |
2269 | 473 SET_MAX_GREP_VALUES); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
474 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
475 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
476 out: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
477 dmFree(vspec); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
478 dmFree(vstr); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
479 return ret; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
480 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
481 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
482 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
483 BOOL argHandleOpt(const int optN, char *optArg, char *currArg) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
484 { |
1995
ea6337c873c6
Silence an unused function argument warning.
Matti Hamalainen <ccr@tnsp.org>
parents:
1685
diff
changeset
|
485 (void) optArg; |
ea6337c873c6
Silence an unused function argument warning.
Matti Hamalainen <ccr@tnsp.org>
parents:
1685
diff
changeset
|
486 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
487 switch (optN) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
488 { |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
489 case 0: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
490 argShowHelp(); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
491 exit(0); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
492 break; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
493 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
494 case 1: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
495 dmVerbosity++; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
496 break; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
497 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
498 case 2: |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
499 return argParseGrepValue(optArg, FA_GREP) == DMERR_OK; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
500 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
501 case 3: |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
502 return argParseGrepValue(optArg, FA_OFFSET) == DMERR_OK; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
503 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
504 case 4: |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
505 setMode = FA_MATCHES; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
506 break; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
507 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
508 case 5: |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
509 optMinMatchLen = atoi(optArg); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
510 if (optMinMatchLen < 2 || optMinMatchLen > 16*1024) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
511 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
512 dmErrorMsg("Invalid minimum match length '%s'.\n", |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
513 optArg); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
514 return FALSE; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
515 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
516 return TRUE; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
517 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
518 default: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
519 dmErrorMsg("Unknown argument '%s'.\n", currArg); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
520 return FALSE; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
521 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
522 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
523 return TRUE; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
524 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
525 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
526 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
527 BOOL argHandleNonOpt(char *currArg) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
528 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
529 if (nsrcFiles < SET_MAX_FILES) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
530 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
531 DMSourceFile *file = &srcFiles[nsrcFiles++]; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
532 file->filename = currArg; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
533 return TRUE; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
534 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
535 else |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
536 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
537 dmErrorMsg("Maximum number of input files exceeded (%d).\n", |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
538 SET_MAX_FILES); |
1996 | 539 return TRUE; |
540 } | |
541 } | |
542 | |
543 | |
544 void dmInitStats(DMStats *stats) | |
545 { | |
546 for (size_t n = 0; n < SET_MAX_ELEMS; n++) | |
547 { | |
548 stats->cv[n].count = 0; | |
549 stats->cv[n].value = n; | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
550 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
551 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
552 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
553 |
1996 | 554 int dmCompareStatFunc(const void *va, const void *vb) |
555 { | |
556 const DMStatValue *pa = va, *pb = vb; | |
557 return pb->count - pa->count; | |
558 } | |
559 | |
560 | |
561 void dmPrintStats(DMStats *stats, const int nmax, const size_t size) | |
562 { | |
2011 | 563 qsort(&stats->cv, SET_MAX_ELEMS, sizeof(DMStatValue), dmCompareStatFunc); |
564 | |
1996 | 565 for (int n = 0; n < nmax; n++) |
566 { | |
2011 | 567 printf("$%02x (%d = %1.2f%%), ", |
1996 | 568 stats->cv[n].value, |
2011 | 569 stats->cv[n].count, |
1996 | 570 ((float) stats->cv[n].count * 100.0f) / (float) size); |
571 } | |
572 printf("\n\n"); | |
573 } | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
574 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
575 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
576 BOOL dmAddMatchSequence(Uint8 *data, const size_t len, DMSourceFile *file, size_t offs) |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
577 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
578 DMMatchSeq *seq = NULL; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
579 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
580 // Check for existing match sequence |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
581 for (int n = 0; n < ndmSequences; n++) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
582 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
583 DMMatchSeq *node = &dmSequences[n]; |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
584 if (node->len >= len && |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
585 memcmp(node->data + node->len - len, data, len) == 0) |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
586 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
587 seq = node; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
588 break; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
589 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
590 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
591 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
592 if (seq == NULL) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
593 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
594 // No sequence found, add a new one |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
595 if (ndmSequences + 1 >= SET_MAX_SEQUENCES) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
596 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
597 dmErrorMsg("Too many matching sequences found.\n"); |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
598 return FALSE; |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
599 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
600 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
601 seq = &dmSequences[ndmSequences++]; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
602 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
603 else |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
604 { |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
605 // Check for existing place |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
606 for (int n = 0; n < seq->nplaces; n++) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
607 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
608 DMMatchPlace *place = &seq->places[n]; |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
609 if (place->file == file && |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
610 place->offs + seq->len == offs + len) |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
611 return TRUE; |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
612 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
613 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
614 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
615 seq->data = data; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
616 seq->len = len; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
617 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
618 // Add another file + offset |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
619 if (seq->nplaces < SET_MAX_PLACES) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
620 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
621 DMMatchPlace *place = &seq->places[seq->nplaces++]; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
622 place->file = file; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
623 place->offs = offs; |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
624 |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
625 return TRUE; |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
626 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
627 else |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
628 return FALSE; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
629 } |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
630 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
631 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
632 int dmCompareMatchPlaces(const void *pa, const void *pb) |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
633 { |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
634 const DMMatchPlace *va = (DMMatchPlace *) pa, |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
635 *vb = (DMMatchPlace *) pb; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
636 |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
637 return va->offs - vb->offs; |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
638 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
639 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
640 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
641 int main(int argc, char *argv[]) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
642 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
643 DMCompElem *compBuf = NULL; |
1996 | 644 size_t compBufSize = 0, totalSize = 0; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
645 int res; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
646 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
647 memset(&dmSequences, 0, sizeof(dmSequences)); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
648 |
2234 | 649 dmInitProg("fanalyze", "Simple tool for file format analysis", |
650 "0.4", NULL, NULL); | |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
651 dmVerbosity = 0; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
652 |
1996 | 653 dmInitStats(&totalStats); |
654 | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
655 // Parse arguments |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
656 if (!dmArgsProcess(argc, argv, optList, optListN, |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
657 argHandleOpt, argHandleNonOpt, OPTH_BAILOUT)) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
658 exit(1); |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
659 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
660 if (nsrcFiles < 1) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
661 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
662 dmErrorMsg("Nothing to do. (try --help)\n"); |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
663 goto out; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
664 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
665 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
666 // Read input files |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
667 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
668 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
669 DMSourceFile *file = &srcFiles[nfile]; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
670 if ((res = dmReadDataFile(NULL, file->filename, &file->data, &file->size)) != DMERR_OK) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
671 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
672 dmErrorMsg("Could not read '%s': %s\n", |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
673 file->filename, dmErrorStr(res)); |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
674 goto out; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
675 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
676 |
1685
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
677 dmPrint(2, "Input #%d: '%s', %" DM_PRIu_SIZE_T " bytes.\n", |
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
678 nfile + 1, file->filename, file->size); |
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
679 |
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
680 if (!compBufSize || file->size < compBufSize) |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
681 compBufSize = file->size; |
1996 | 682 |
683 totalSize += file->size; | |
2011 | 684 dmInitStats(&file->stats); |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
685 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
686 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
687 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
688 // |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
689 // Check what operating mode we are in |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
690 // |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
691 if (setMode == FA_GREP) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
692 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
693 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
694 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
695 DMSourceFile *file = &srcFiles[nfile]; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
696 dmPrint(0, "\n%s\n", file->filename); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
697 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
698 for (int n = 0; n < nsetGrepValues; n++) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
699 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
700 DMGrepValue *node = &setGrepValues[n]; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
701 const DMGrepType *def = &dmGrepTypes[node->type]; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
702 |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
703 for (size_t offs = 0; offs + (def->bsize * node->nvalues) < file->size; offs++) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
704 { |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
705 BOOL match = TRUE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
706 for (int n = 0; n < node->nvalues; n++) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
707 if (!node->vwildcards[n]) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
708 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
709 Uint32 mval; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
710 dmGetData(node->type, file, offs + n, &mval); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
711 |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
712 if (mval != node->values[n]) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
713 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
714 match = FALSE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
715 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
716 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
717 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
718 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
719 if (match) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
720 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
721 dmPrint(0, "%08x : ", offs); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
722 dmPrintGrepValueList(node, TRUE, file, offs); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
723 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
724 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
725 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
726 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
727 } |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
728 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
729 if (setMode == FA_OFFSET) |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
730 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
731 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
732 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
733 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
734 dmPrint(1, "#%03d: %s\n", nfile + 1, file->filename); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
735 } |
1996 | 736 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
737 printf(" offset :"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
738 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
739 printf(" %03d ", nfile + 1); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
740 printf("\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
741 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
742 printf("=========="); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
743 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
744 printf("==========="); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
745 printf("\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
746 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
747 for (int n = 0; n < nsetGrepValues; n++) |
1996 | 748 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
749 DMGrepValue *node = &setGrepValues[n]; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
750 const DMGrepType *def = &dmGrepTypes[node->type]; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
751 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
752 for (int nv = 0; nv < node->nvalues; nv++) |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
753 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
754 printf("%08x : ", node->values[nv]); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
755 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
756 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
757 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
758 DMSourceFile *file = &srcFiles[nfile]; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
759 Uint32 mval; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
760 char mstr[32]; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
761 int npad, nwidth; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
762 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
763 if (dmGetData(node->type, file, node->values[nv], &mval)) |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
764 { |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
765 char mfmt[16]; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
766 nwidth = def->bsize * 2; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
767 snprintf(mfmt, sizeof(mfmt), "%%0%d%s", |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
768 nwidth, dmGrepDisp[node->disp].fmt); |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
769 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
770 snprintf(mstr, sizeof(mstr), mfmt, mval); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
771 } |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
772 else |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
773 { |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
774 strcpy(mstr, "----"); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
775 nwidth = 4; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
776 } |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
777 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
778 npad = (10 - nwidth) / 2; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
779 for (int q = 0; q < npad; q++) |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
780 fputc(' ', stdout); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
781 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
782 fputs(mstr, stdout); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
783 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
784 for (int q = 0; q < npad; q++) |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
785 fputc(' ', stdout); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
786 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
787 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
788 printf(" [%s]\n", |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
789 dmGrepDisp[node->disp].name); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
790 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
791 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
792 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
793 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
794 if (setMode == FA_ANALYZE) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
795 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
796 // Allocate comparision buffer |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
797 // XXX: integer overflow? |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
798 dmPrint(2, "Allocating %d element (%d bytes) comparision buffer.\n", |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
799 compBufSize, compBufSize * sizeof(DMCompElem)); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
800 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
801 if ((compBuf = dmCalloc(compBufSize, sizeof(DMCompElem))) == NULL) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
802 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
803 dmErrorMsg("Out of memory. Could not allocate comparision buffer!\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
804 goto out; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
805 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
806 |
2234 | 807 // |
808 // Basic file data comparision | |
809 // | |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
810 dmPrint(2, "Analyzing ..\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
811 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
812 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
813 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
814 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
815 for (size_t offs = 0; offs < file->size; offs++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
816 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
817 Uint8 bv = file->data[offs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
818 totalStats.cv[bv].count++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
819 file->stats.cv[bv].count++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
820 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
821 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
822 for (size_t offs = 0; offs < compBufSize; offs++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
823 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
824 Uint8 data = offs < file->size ? file->data[offs] : 0; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
825 compBuf[offs].stats[data]++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
826 } |
1996 | 827 } |
828 | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
829 for (size_t offs = 0; offs < compBufSize; offs++) |
1685
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
830 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
831 DMCompElem *el = &compBuf[offs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
832 for (int n = 0; n < SET_MAX_ELEMS; n++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
833 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
834 if (el->stats[n] > 0) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
835 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
836 el->variants++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
837 el->data = n; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
838 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
839 } |
1685
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
840 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
841 |
2234 | 842 // |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
843 // Display results |
2234 | 844 // |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
845 for (size_t offs = 0, n = 0; offs < compBufSize; offs++) |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
846 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
847 DMCompElem *el = &compBuf[offs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
848 BOOL var = el->variants > 1; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
849 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
850 if (n == 0) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
851 printf("%08" DM_PRIx_SIZE_T " | ", offs); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
852 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
853 if (var) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
854 printf("[%2d] ", el->variants); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
855 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
856 printf(" %02x ", el->data); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
857 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
858 if (++n >= 16) |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
859 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
860 printf("\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
861 n = 0; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
862 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
863 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
864 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
865 printf("\n"); |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
866 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
867 // |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
868 // Attempt further analysis |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
869 // |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
870 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
871 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
872 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
873 size_t len = file->size > compBufSize ? compBufSize : file->size; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
874 for (size_t offs = 0; offs + 4 < len; offs++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
875 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
876 DMCompElem *elem = &compBuf[offs]; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
877 |
2268
f2ff364065eb
Add constant define for maximum number of variants.
Matti Hamalainen <ccr@tnsp.org>
parents:
2267
diff
changeset
|
878 for (int variant = SET_MAX_VARIANTS - 1; variant >= 0; variant--) |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
879 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
880 size_t nmax = (variant < 2) ? sizeof(Uint16) : sizeof(Uint32); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
881 Uint32 tmp = 0; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
882 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
883 for (size_t n = 0; n < nmax; n++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
884 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
885 size_t boffs = (variant & 1) ? n : nmax - n; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
886 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
887 tmp <<= 8; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
888 tmp |= file->data[offs + boffs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
889 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
890 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
891 if (file->size - tmp < 32) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
892 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
893 elem->interest[variant] += 32 - (file->size - tmp); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
894 elem->interestF[variant]++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
895 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
896 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
897 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
898 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
899 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
900 printf("\nMore findings:\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
901 for (size_t offs = 0; offs + 4 < compBufSize; offs++) |
1996 | 902 { |
903 DMCompElem *elem = &compBuf[offs]; | |
904 | |
2268
f2ff364065eb
Add constant define for maximum number of variants.
Matti Hamalainen <ccr@tnsp.org>
parents:
2267
diff
changeset
|
905 for (int variant = 0; variant < SET_MAX_VARIANTS; variant++) |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
906 if (elem->interestF[variant] > 0) |
1996 | 907 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
908 printf("%08" DM_PRIx_SIZE_T " | V%d : %d / %d\n", |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
909 offs, variant, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
910 elem->interestF[variant], elem->interest[variant]); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
911 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
912 } |
1996 | 913 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
914 printf("\nGlobal most used bytes:\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
915 dmPrintStats(&totalStats, 16, totalSize); |
1996 | 916 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
917 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
918 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
919 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
920 printf("Most used bytes for '%s':\n", file->filename); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
921 dmPrintStats(&file->stats, 16, file->size); |
1996 | 922 } |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
923 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
924 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
925 else |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
926 if (setMode == FA_MATCHES) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
927 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
928 // |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
929 // Attempt to find matching sequences of N+ |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
930 // |
2274
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
931 BOOL slow = FALSE; |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
932 int ss = 0; |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
933 dmPrint(0, "Attempting to find matching sequences of %" DM_PRIu_SIZE_T" bytes or more.\n", |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
934 optMinMatchLen); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
935 |
2273
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
936 if (totalSize > 32*1024) |
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
937 { |
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
938 dmPrint(0, |
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
939 "WARNING! Total data size is large, and the matching \"algorithm\"\n" |
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
940 "used is horribly inefficient. This will be quite slow ...\n"); |
2274
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
941 slow = TRUE; |
2273
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
942 } |
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
943 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
944 for (int nfile1 = 0; nfile1 < nsrcFiles; nfile1++) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
945 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
946 DMSourceFile *file1 = &srcFiles[nfile1]; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
947 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
948 for (int nfile2 = 0; nfile2 < nsrcFiles; nfile2++) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
949 if (nfile2 != nfile1 && !file1->analyzed) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
950 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
951 DMSourceFile *file2 = &srcFiles[nfile2]; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
952 |
2274
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
953 if (slow) |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
954 { |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
955 dmPrint(0, |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
956 "Processing .. %1.1f%%\r", |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
957 (float) ss * 100.0f / (float) (nsrcFiles * (nsrcFiles - 1))); |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
958 ss++; |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
959 } |
2284 | 960 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
961 for (size_t moffs1 = 0; moffs1 + optMinMatchLen < file1->size;) |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
962 { |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
963 size_t cnt = 0; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
964 for (size_t moffs2 = 0; moffs2 + optMinMatchLen < file2->size; moffs2++) |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
965 { |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
966 for (cnt = 0; moffs1 + cnt + optMinMatchLen < file1->size && |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
967 moffs2 + cnt + optMinMatchLen < file2->size; cnt++) |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
968 { |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
969 if (file1->data[moffs1 + cnt] != file2->data[moffs2 + cnt]) |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
970 break; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
971 } |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
972 |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
973 if (cnt >= optMinMatchLen) |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
974 { |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
975 // Match found |
2272
4f52b7f5fe51
Bail out from the matching search if we exceed the match limits.
Matti Hamalainen <ccr@tnsp.org>
parents:
2271
diff
changeset
|
976 if (!dmAddMatchSequence(file1->data + moffs1, cnt, file1, moffs1) || |
4f52b7f5fe51
Bail out from the matching search if we exceed the match limits.
Matti Hamalainen <ccr@tnsp.org>
parents:
2271
diff
changeset
|
977 !dmAddMatchSequence(file2->data + moffs2, cnt, file2, moffs2)) |
4f52b7f5fe51
Bail out from the matching search if we exceed the match limits.
Matti Hamalainen <ccr@tnsp.org>
parents:
2271
diff
changeset
|
978 goto done; |
4f52b7f5fe51
Bail out from the matching search if we exceed the match limits.
Matti Hamalainen <ccr@tnsp.org>
parents:
2271
diff
changeset
|
979 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
980 moffs1 += cnt; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
981 } |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
982 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
983 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
984 if (cnt < optMinMatchLen) |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
985 moffs1++; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
986 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
987 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
988 file1->analyzed = TRUE; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
989 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
990 |
2272
4f52b7f5fe51
Bail out from the matching search if we exceed the match limits.
Matti Hamalainen <ccr@tnsp.org>
parents:
2271
diff
changeset
|
991 done: |
4f52b7f5fe51
Bail out from the matching search if we exceed the match limits.
Matti Hamalainen <ccr@tnsp.org>
parents:
2271
diff
changeset
|
992 |
2274
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
993 if (slow) |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
994 dmPrint(0, "\n\n"); |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
995 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
996 for (int nmatch = 0; nmatch < ndmSequences; nmatch++) |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
997 { |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
998 DMMatchSeq *seq = &dmSequences[nmatch]; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
999 |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1000 qsort(&seq->places, seq->nplaces, sizeof(DMMatchPlace), |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1001 dmCompareMatchPlaces); |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1002 } |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1003 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1004 // |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1005 // Display results |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1006 // |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1007 dmPrint(0, "Found %d matching sequence groups of %" DM_PRIu_SIZE_T " bytes minimum.\n", |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1008 ndmSequences, optMinMatchLen); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1009 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1010 for (int nmatch = 0; nmatch < ndmSequences; nmatch++) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1011 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1012 DMMatchSeq *seq = &dmSequences[nmatch]; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1013 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1014 printf("\nSeq of %" DM_PRIu_SIZE_T " bytes in %d places (%d files)\n", |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1015 seq->len, seq->nplaces, seq->nfiles); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1016 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1017 if (dmVerbosity > 0) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1018 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1019 int n = 0; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1020 for (size_t offs = 0; offs < seq->len; offs++) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1021 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1022 if (n == 0) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1023 printf(" "); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1024 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1025 printf("%02x%s", |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1026 seq->data[offs], |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1027 offs + 1 < seq->len ? " " : ""); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1028 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1029 if (++n >= 16) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1030 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1031 printf("\n"); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1032 n = 0; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1033 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1034 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1035 if (n > 0) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1036 printf("\n"); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1037 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1038 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1039 for (int nplace = 0; nplace < seq->nplaces; nplace++) |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1040 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1041 DMMatchPlace *place = &seq->places[nplace]; |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1042 printf(" %08" DM_PRIx_SIZE_T "-%08" DM_PRIx_SIZE_T ": %s\n", |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1043 place->offs, |
2271
dcf9abeec930
Fix matched area end offset display.
Matti Hamalainen <ccr@tnsp.org>
parents:
2270
diff
changeset
|
1044 place->offs + seq->len - 1, |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1045 place->file->filename); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1046 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1047 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1048 } |
1996 | 1049 } |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
1050 else |
1996 | 1051 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
1052 dmErrorMsg("Invalid operating mode?\n"); |
1996 | 1053 } |
1054 | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1055 out: |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1056 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1057 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1058 DMSourceFile *file = &srcFiles[nfile]; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1059 dmFree(file->data); |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1060 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1061 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1062 return 0; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1063 } |