Mercurial > hg > dmlib
annotate tools/fanalyze.c @ 2431:ca548150de6b
Fix grepping of consecutive values in fanalyze when using > byte size types.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 19 Feb 2020 01:52:36 +0200 |
parents | 190f5caaf1a8 |
children | 758223ba6551 |
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; |
2396
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
55 size_t index; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
56 } DMSourceFile; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
57 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
58 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
59 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
|
60 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
61 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
|
62 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
|
63 } DMMatchPlace; |
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 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
66 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
|
67 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
68 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
|
69 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
|
70 |
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 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
|
72 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
|
73 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
|
74 } DMMatchSeq; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
75 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
76 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
77 enum |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
78 { |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
79 DMGV_UINT8 = 0, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
80 DMGV_UINT16_LE, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
81 DMGV_UINT16_BE, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
82 DMGV_UINT32_LE, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
83 DMGV_UINT32_BE, |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
84 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
85 DMGV_last |
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 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
88 |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
89 enum |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
90 { |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
91 DMGS_HEX = 0, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
92 DMGS_DEC, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
93 DMGS_last |
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 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
96 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
97 typedef struct |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
98 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
99 int type; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
100 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
|
101 int nvalues; |
2269 | 102 Uint32 values[SET_MAX_GREP_LIST]; |
103 BOOL vwildcards[SET_MAX_GREP_LIST]; | |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
104 } DMGrepValue; |
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 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
107 typedef struct |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
108 { |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
109 char *name; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
110 Uint32 nmax; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
111 unsigned int bsize; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
112 } DMGrepType; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
113 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
114 |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
115 static const DMGrepType dmGrepTypes[DMGV_last] = |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
116 { |
2040
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
117 { "8bit (byte)" , (1ULL << 8) - 1, 1 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
118 { "16bit (word) LE" , (1ULL << 16) - 1, 2 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
119 { "16bit (word) BE" , (1ULL << 16) - 1, 2 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
120 { "32bit (word) LE" , (1ULL << 32) - 1, 4 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
121 { "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
|
122 }; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
123 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
124 |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
125 typedef struct |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
126 { |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
127 char *name; |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
128 char *fmtPrefix; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
129 char *fmt; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
130 } DMGrepDisp; |
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 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
133 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
|
134 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
135 { "hex", "0", "x" }, |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
136 { "dec", "" , "d" }, |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
137 }; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
138 |
2249 | 139 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
140 enum |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
141 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
142 FA_ANALYZE, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
143 FA_GREP, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
144 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
|
145 FA_MATCHES, |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
146 }; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
147 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
148 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
149 /* Global variables |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
150 */ |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
151 int setMode = FA_ANALYZE; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
152 int nsrcFiles = 0; // Number of source files |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
153 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
|
154 DMStats totalStats; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
155 int nsetGrepValues = 0; |
2269 | 156 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
|
157 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
|
158 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
159 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
|
160 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
|
161 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
162 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
163 /* Arguments |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
164 */ |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
165 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
|
166 { |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
167 { 0, '?', "help" , "Show this help", OPT_NONE }, |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
168 { 1, 0, "license" , "Print out this program's license agreement", OPT_NONE }, |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
169 { 2, 'v', "verbose" , "Be more verbose", OPT_NONE }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
170 |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
171 { 10, 'g', "grep" , "Binary grep <val>[,<val2>...][:<le|be>[8|16|32]]", OPT_ARGREQ }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
172 { 12, 'o', "offset" , "Show data in offset <offs>[,<offs2>...][:<le|be>[8|16|32][d|x]]", OPT_ARGREQ }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
173 { 14, 'm', "match" , "Find matching sequences minimum of <n> bytes long", OPT_NONE }, |
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
174 { 16, '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
|
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 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
|
178 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
179 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
180 void argShowHelp() |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
181 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
182 dmPrintBanner(stdout, dmProgName, "[options] <input file #1> <input file #2> [...]"); |
2402
b7cd5dd0b82e
Merge one more change from th-libs args processing.
Matti Hamalainen <ccr@tnsp.org>
parents:
2396
diff
changeset
|
183 dmArgsPrintHelp(stdout, optList, optListN, 0, 80 - 2); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
184 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
185 fprintf(stdout, |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
186 "\n" |
2234 | 187 "Fanalyze is a simplistic commandline tool to assist analysis of similarities\n" |
188 "between multiple files of same format (but different content). It provides\n" | |
189 "automatic analysis (default operating mode), binary grep functionality (-g)\n" | |
190 "and offset data display (-o)\n" | |
191 "\n" | |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
192 "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
|
193 "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
|
194 "-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
|
195 "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
|
196 "\n" |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
197 "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
|
198 "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
|
199 ); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
200 } |
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 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
203 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
|
204 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
205 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
|
206 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
|
207 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
208 *mval = 0; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
209 return FALSE; |
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 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
212 switch (type) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
213 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
214 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
|
215 *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
|
216 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
217 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
218 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
|
219 *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
|
220 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
221 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
222 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
|
223 *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
|
224 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
225 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
226 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
|
227 *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
|
228 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
229 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
230 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
|
231 *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
|
232 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
233 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
234 default: |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
235 *mval = 0; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
236 return FALSE; |
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 return TRUE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
239 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
240 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
241 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
242 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
|
243 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
244 char mfmt[16]; |
2431
ca548150de6b
Fix grepping of consecutive values in fanalyze when using > byte size types.
Matti Hamalainen <ccr@tnsp.org>
parents:
2430
diff
changeset
|
245 unsigned int bsize = dmGrepTypes[node->type].bsize; |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
246 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
247 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
|
248 dmGrepDisp[node->disp].fmtPrefix, |
2431
ca548150de6b
Fix grepping of consecutive values in fanalyze when using > byte size types.
Matti Hamalainen <ccr@tnsp.org>
parents:
2430
diff
changeset
|
249 bsize * 2, |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
250 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
|
251 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
252 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
|
253 { |
2248 | 254 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
|
255 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
256 if (match) |
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 Uint32 mval; |
2431
ca548150de6b
Fix grepping of consecutive values in fanalyze when using > byte size types.
Matti Hamalainen <ccr@tnsp.org>
parents:
2430
diff
changeset
|
259 dmGetData(node->type, file, offs + n * bsize, &mval); |
2290
180604abb65a
Always print out grep value list.
Matti Hamalainen <ccr@tnsp.org>
parents:
2284
diff
changeset
|
260 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
|
261 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
262 else |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
263 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
264 if (node->vwildcards[n]) |
2290
180604abb65a
Always print out grep value list.
Matti Hamalainen <ccr@tnsp.org>
parents:
2284
diff
changeset
|
265 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
|
266 else |
2290
180604abb65a
Always print out grep value list.
Matti Hamalainen <ccr@tnsp.org>
parents:
2284
diff
changeset
|
267 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
|
268 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
269 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
270 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
271 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
272 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
273 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
|
274 { |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
275 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
|
276 char *vspec, *vstr, *vsep; |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
277 DMGrepValue val; |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
278 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
|
279 BOOL more; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
280 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
281 memset(&val, 0, sizeof(val)); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
282 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
283 if (setMode != FA_ANALYZE && setMode != mode) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
284 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
285 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
|
286 return DMERR_INVALID_ARGS; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
287 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
288 setMode = mode; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
289 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
290 // 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
|
291 if (specsep != NULL) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
292 { |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
293 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
|
294 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
|
295 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
296 else |
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 vspec = NULL; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
299 vstr = dm_strdup(arg); |
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 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
302 // Parse spec if any |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
303 if (vspec != NULL) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
304 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
305 BOOL vendianess = TRUE; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
306 char *vtmp = vspec; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
307 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
308 // Get endianess specifier, if any |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
309 if (dm_strncasecmp(vtmp, "le", 2) == 0) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
310 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
311 vendianess = TRUE; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
312 vtmp += 2; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
313 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
314 else |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
315 if (dm_strncasecmp(vtmp, "be", 2) == 0) |
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 vendianess = FALSE; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
318 vtmp += 2; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
319 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
320 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
321 // Get value bit size |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
322 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
|
323 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
324 val.type = DMGV_UINT8; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
325 vtmp += 1; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
326 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
327 else |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
328 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
|
329 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
330 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
|
331 vtmp += 2; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
332 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
333 else |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
334 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
|
335 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
336 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
|
337 vtmp += 2; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
338 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
339 else |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
340 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
341 ret = dmError(DMERR_INVALID_ARGS, |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
342 "Invalid grep type '%s'.\n", |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
343 vspec); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
344 goto out; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
345 } |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
346 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
347 switch (tolower(*vtmp)) |
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 'd': |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
350 val.disp = DMGS_DEC; |
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 'x': case 'h': |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
354 val.disp = DMGS_HEX; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
355 break; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
356 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
357 case 0: |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
358 break; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
359 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
360 default: |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
361 ret = dmError(DMERR_INVALID_ARGS, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
362 "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
|
363 vspec); |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
364 goto out; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
365 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
366 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
367 |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
368 // 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
|
369 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
|
370 do |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
371 { |
2269 | 372 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
|
373 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
374 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
|
375 "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
|
376 vstr); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
377 goto out; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
378 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
379 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
380 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
|
381 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
382 *vsep = 0; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
383 more = TRUE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
384 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
385 else |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
386 more = FALSE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
387 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
388 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
|
389 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
390 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
|
391 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
|
392 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
393 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
|
394 "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
|
395 goto out; |
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 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
398 else |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
399 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
|
400 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
401 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
|
402 "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
|
403 vtmp); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
404 goto out; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
405 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
406 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
407 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
|
408 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
409 if (more) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
410 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
|
411 } while (more); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
412 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
413 if (val.vwildcards[0]) |
2028
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 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
|
416 "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
|
417 goto out; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
418 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
419 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
420 if (mode == FA_GREP) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
421 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
422 // Check if we need to guess size |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
423 if (val.type < 0) |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
424 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
425 for (int n = DMGV_last; n >= 0; n--) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
426 { |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
427 const DMGrepType *def = &dmGrepTypes[n]; |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
428 if (val.values[0] <= def->nmax) |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
429 val.type = n; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
430 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
431 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
432 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
433 if (val.type < 0) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
434 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
435 ret = dmError(DMERR_INVALID_ARGS, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
436 "Could not guess value type for '%s'.\n", |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
437 arg); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
438 goto out; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
439 } |
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 // Check range |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
442 for (int n = 0; n < val.nvalues; n++) |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
443 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
|
444 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
445 ret = dmError(DMERR_INVALID_ARGS, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
446 "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
|
447 val.values[n], 0, dmGrepTypes[val.type].nmax, |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
448 dmGrepTypes[val.type].name); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
449 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
450 goto out; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
451 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
452 } |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
453 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
454 if (mode == FA_OFFSET) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
455 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
456 if (val.type < 0) |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
457 val.type = DMGV_UINT8; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
458 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
459 |
2269 | 460 if (nsetGrepValues < SET_MAX_GREP_VALUES) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
461 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
462 DMGrepValue *node = &setGrepValues[nsetGrepValues++]; |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
463 memcpy(node, &val, sizeof(val)); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
464 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
465 if (mode == FA_GREP) |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
466 { |
2430
190f5caaf1a8
Use printf() here as well.
Matti Hamalainen <ccr@tnsp.org>
parents:
2429
diff
changeset
|
467 printf("Grep %s: ", |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
468 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
|
469 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
470 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
|
471 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
472 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
473 else |
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 ret = dmError(DMERR_BOUNDS, |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
476 "Too many values specified (max %d).", |
2269 | 477 SET_MAX_GREP_VALUES); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
478 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
479 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
480 out: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
481 dmFree(vspec); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
482 dmFree(vstr); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
483 return ret; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
484 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
485 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
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 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
|
488 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
489 switch (optN) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
490 { |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
491 case 0: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
492 argShowHelp(); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
493 exit(0); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
494 break; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
495 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
496 case 1: |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
497 dmPrintLicense(stdout); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
498 exit(0); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
499 break; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
500 |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2408
diff
changeset
|
501 case 2: |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
502 dmVerbosity++; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
503 break; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
504 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
505 case 10: |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
506 return argParseGrepValue(optArg, FA_GREP) == DMERR_OK; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
507 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
508 case 12: |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
509 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
|
510 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
511 case 14: |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
512 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
|
513 break; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
514 |
2408
60e119262c67
Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
515 case 16: |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
516 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
|
517 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
|
518 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
519 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
|
520 optArg); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
521 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
|
522 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
523 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
|
524 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
525 default: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
526 dmErrorMsg("Unknown argument '%s'.\n", currArg); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
527 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
|
528 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
529 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
530 return TRUE; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
531 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
532 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
533 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
534 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
|
535 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
536 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
|
537 { |
2396
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
538 DMSourceFile *file = &srcFiles[nsrcFiles]; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
539 file->filename = currArg; |
2396
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
540 file->index = nsrcFiles; |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
541 nsrcFiles++; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
542 return TRUE; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
543 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
544 else |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
545 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
546 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
|
547 SET_MAX_FILES); |
1996 | 548 return TRUE; |
549 } | |
550 } | |
551 | |
552 | |
553 void dmInitStats(DMStats *stats) | |
554 { | |
555 for (size_t n = 0; n < SET_MAX_ELEMS; n++) | |
556 { | |
557 stats->cv[n].count = 0; | |
558 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
|
559 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
560 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
561 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
562 |
1996 | 563 int dmCompareStatFunc(const void *va, const void *vb) |
564 { | |
565 const DMStatValue *pa = va, *pb = vb; | |
566 return pb->count - pa->count; | |
567 } | |
568 | |
569 | |
570 void dmPrintStats(DMStats *stats, const int nmax, const size_t size) | |
571 { | |
2011 | 572 qsort(&stats->cv, SET_MAX_ELEMS, sizeof(DMStatValue), dmCompareStatFunc); |
573 | |
1996 | 574 for (int n = 0; n < nmax; n++) |
575 { | |
2011 | 576 printf("$%02x (%d = %1.2f%%), ", |
1996 | 577 stats->cv[n].value, |
2011 | 578 stats->cv[n].count, |
1996 | 579 ((float) stats->cv[n].count * 100.0f) / (float) size); |
580 } | |
581 printf("\n\n"); | |
582 } | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
583 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
584 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
585 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
|
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 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
|
588 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
589 // 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
|
590 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
|
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 DMMatchSeq *node = &dmSequences[n]; |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
593 if (node->len >= len && |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
594 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
|
595 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
596 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
|
597 break; |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
598 } |
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 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
|
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 // 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
|
604 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
|
605 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
606 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
|
607 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
|
608 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
609 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
610 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
|
611 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
612 else |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
613 { |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
614 // 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
|
615 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
|
616 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
617 DMMatchPlace *place = &seq->places[n]; |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
618 if (place->file == file && |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
619 place->offs + seq->len == offs + len) |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
620 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
|
621 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
622 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
623 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
624 seq->data = data; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
625 seq->len = len; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
626 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
627 // 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
|
628 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
|
629 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
630 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
|
631 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
|
632 place->offs = offs; |
2270
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 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
|
635 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
636 else |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
637 return FALSE; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
638 } |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
639 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
640 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
641 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
|
642 { |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
643 const DMMatchPlace *va = (DMMatchPlace *) pa, |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
644 *vb = (DMMatchPlace *) pb; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
645 |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
646 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
|
647 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
648 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
649 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
650 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
|
651 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
652 DMCompElem *compBuf = NULL; |
2396
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
653 size_t compBufSize = 0, totalSize = 0, fileFlagsSize; |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
654 BOOL *fileFlags = NULL; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
655 int res; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
656 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
657 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
|
658 |
2234 | 659 dmInitProg("fanalyze", "Simple tool for file format analysis", |
660 "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
|
661 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
|
662 |
1996 | 663 dmInitStats(&totalStats); |
664 | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
665 // Parse arguments |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
666 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
|
667 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
|
668 exit(1); |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
669 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
670 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
|
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("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
|
673 goto out; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
674 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
675 |
2396
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
676 // Allocate file flags |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
677 fileFlagsSize = sizeof(BOOL) * nsrcFiles; |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
678 if ((fileFlags = dmMalloc(fileFlagsSize)) == NULL) |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
679 { |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
680 dmErrorMsg("Could not allocate %" DM_PRIu_SIZE_T " bytes of memory for file flag array.\n", |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
681 fileFlagsSize); |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
682 goto out; |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
683 } |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
684 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
685 // 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
|
686 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
|
687 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
688 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
|
689 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
|
690 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
691 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
|
692 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
|
693 goto out; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
694 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
695 |
1685
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
696 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
|
697 nfile + 1, file->filename, file->size); |
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
698 |
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
699 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
|
700 compBufSize = file->size; |
1996 | 701 |
702 totalSize += file->size; | |
2011 | 703 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
|
704 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
705 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
706 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
707 // |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
708 // Check what operating mode we are in |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
709 // |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
710 if (setMode == FA_GREP) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
711 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
712 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
713 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
714 DMSourceFile *file = &srcFiles[nfile]; |
2429
ebb4650f3cc1
Use printf() instead of dmPrint() for some things.
Matti Hamalainen <ccr@tnsp.org>
parents:
2410
diff
changeset
|
715 printf("\n%s\n", file->filename); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
716 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
717 for (int n = 0; n < nsetGrepValues; n++) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
718 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
719 DMGrepValue *node = &setGrepValues[n]; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
720 const DMGrepType *def = &dmGrepTypes[node->type]; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
721 |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
722 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
|
723 { |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
724 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
|
725 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
|
726 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
|
727 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
728 Uint32 mval; |
2431
ca548150de6b
Fix grepping of consecutive values in fanalyze when using > byte size types.
Matti Hamalainen <ccr@tnsp.org>
parents:
2430
diff
changeset
|
729 dmGetData(node->type, file, offs + n * def->bsize, &mval); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
730 |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
731 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
|
732 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
733 match = FALSE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
734 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
735 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
736 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
737 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
738 if (match) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
739 { |
2429
ebb4650f3cc1
Use printf() instead of dmPrint() for some things.
Matti Hamalainen <ccr@tnsp.org>
parents:
2410
diff
changeset
|
740 printf("%08" DM_PRIx_SIZE_T " : ", offs); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
741 dmPrintGrepValueList(node, TRUE, file, offs); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
742 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
743 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
744 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
745 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
746 } |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
747 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
748 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
|
749 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
750 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
751 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
752 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
753 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
|
754 } |
1996 | 755 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
756 printf(" offset :"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
757 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
758 printf(" %03d ", nfile + 1); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
759 printf("\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
760 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
761 printf("=========="); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
762 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
763 printf("==========="); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
764 printf("\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
765 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
766 for (int n = 0; n < nsetGrepValues; n++) |
1996 | 767 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
768 DMGrepValue *node = &setGrepValues[n]; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
769 const DMGrepType *def = &dmGrepTypes[node->type]; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
770 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
771 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
|
772 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
773 printf("%08x : ", node->values[nv]); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
774 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
775 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
776 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
777 DMSourceFile *file = &srcFiles[nfile]; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
778 Uint32 mval; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
779 char mstr[32]; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
780 int npad, nwidth; |
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 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
|
783 { |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
784 char mfmt[16]; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
785 nwidth = def->bsize * 2; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
786 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
|
787 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
|
788 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
789 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
|
790 } |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
791 else |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
792 { |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
793 strcpy(mstr, "----"); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
794 nwidth = 4; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
795 } |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
796 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
797 npad = (10 - nwidth) / 2; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
798 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
|
799 fputc(' ', stdout); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
800 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
801 fputs(mstr, stdout); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
802 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
803 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
|
804 fputc(' ', stdout); |
2034
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 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
807 printf(" [%s]\n", |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
808 dmGrepDisp[node->disp].name); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
809 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
810 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
811 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
812 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
813 if (setMode == FA_ANALYZE) |
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 // Allocate comparision buffer |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
816 // XXX: integer overflow? |
2389
647671a9a0b8
More printf() format specifier size_t -related fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
2384
diff
changeset
|
817 dmPrint(2, "Allocating %" DM_PRIu_SIZE_T " element (%" DM_PRIu_SIZE_T |
647671a9a0b8
More printf() format specifier size_t -related fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
2384
diff
changeset
|
818 " bytes) comparision buffer.\n", |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
819 compBufSize, compBufSize * sizeof(DMCompElem)); |
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 if ((compBuf = dmCalloc(compBufSize, sizeof(DMCompElem))) == NULL) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
822 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
823 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
|
824 goto out; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
825 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
826 |
2234 | 827 // |
828 // Basic file data comparision | |
829 // | |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
830 dmPrint(2, "Analyzing ..\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
831 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
832 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
833 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
834 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
835 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
|
836 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
837 Uint8 bv = file->data[offs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
838 totalStats.cv[bv].count++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
839 file->stats.cv[bv].count++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
840 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
841 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
842 for (size_t offs = 0; offs < compBufSize; offs++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
843 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
844 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
|
845 compBuf[offs].stats[data]++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
846 } |
1996 | 847 } |
848 | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
849 for (size_t offs = 0; offs < compBufSize; offs++) |
1685
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
850 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
851 DMCompElem *el = &compBuf[offs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
852 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
|
853 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
854 if (el->stats[n] > 0) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
855 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
856 el->variants++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
857 el->data = n; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
858 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
859 } |
1685
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
860 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
861 |
2234 | 862 // |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
863 // Display results |
2234 | 864 // |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
865 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
|
866 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
867 DMCompElem *el = &compBuf[offs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
868 BOOL var = el->variants > 1; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
869 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
870 if (n == 0) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
871 printf("%08" DM_PRIx_SIZE_T " | ", offs); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
872 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
873 if (var) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
874 printf("[%2d] ", el->variants); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
875 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
876 printf(" %02x ", el->data); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
877 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
878 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
|
879 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
880 printf("\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
881 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
|
882 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
883 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
884 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
885 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
|
886 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
887 // |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
888 // 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
|
889 // |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
890 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
891 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
892 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
893 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
|
894 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
|
895 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
896 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
|
897 |
2268
f2ff364065eb
Add constant define for maximum number of variants.
Matti Hamalainen <ccr@tnsp.org>
parents:
2267
diff
changeset
|
898 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
|
899 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
900 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
|
901 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
|
902 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
903 for (size_t n = 0; n < nmax; n++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
904 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
905 size_t boffs = (variant & 1) ? n : nmax - n; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
906 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
907 tmp <<= 8; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
908 tmp |= file->data[offs + boffs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
909 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
910 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
911 if (file->size - tmp < 32) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
912 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
913 elem->interest[variant] += 32 - (file->size - tmp); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
914 elem->interestF[variant]++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
915 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
916 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
917 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
918 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
919 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
920 printf("\nMore findings:\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
921 for (size_t offs = 0; offs + 4 < compBufSize; offs++) |
1996 | 922 { |
923 DMCompElem *elem = &compBuf[offs]; | |
924 | |
2268
f2ff364065eb
Add constant define for maximum number of variants.
Matti Hamalainen <ccr@tnsp.org>
parents:
2267
diff
changeset
|
925 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
|
926 if (elem->interestF[variant] > 0) |
1996 | 927 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
928 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
|
929 offs, variant, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
930 elem->interestF[variant], elem->interest[variant]); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
931 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
932 } |
1996 | 933 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
934 printf("\nGlobal most used bytes:\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
935 dmPrintStats(&totalStats, 16, totalSize); |
1996 | 936 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
937 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
938 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
939 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
940 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
|
941 dmPrintStats(&file->stats, 16, file->size); |
1996 | 942 } |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
943 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
944 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
945 else |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
946 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
|
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 // |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
949 // 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
|
950 // |
2274
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
951 BOOL slow = FALSE; |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
952 int ss = 0; |
2429
ebb4650f3cc1
Use printf() instead of dmPrint() for some things.
Matti Hamalainen <ccr@tnsp.org>
parents:
2410
diff
changeset
|
953 printf("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
|
954 optMinMatchLen); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
955 |
2273
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
956 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
|
957 { |
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
958 dmPrint(0, |
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
959 "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
|
960 "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
|
961 slow = TRUE; |
2273
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
962 } |
6878aad714ce
Add a slowness warning (the threshold value will probably need adjusting.)
Matti Hamalainen <ccr@tnsp.org>
parents:
2272
diff
changeset
|
963 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
964 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
|
965 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
966 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
|
967 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
968 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
|
969 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
|
970 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
971 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
|
972 |
2274
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
973 if (slow) |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
974 { |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
975 dmPrint(0, |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
976 "Processing .. %1.1f%%\r", |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
977 (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
|
978 ss++; |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
979 } |
2284 | 980 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
981 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
|
982 { |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
983 size_t cnt = 0; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
984 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
|
985 { |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
986 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
|
987 moffs2 + cnt + optMinMatchLen < file2->size; cnt++) |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
988 { |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
989 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
|
990 break; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
991 } |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
992 |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
993 if (cnt >= optMinMatchLen) |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
994 { |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
995 // 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
|
996 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
|
997 !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
|
998 goto done; |
4f52b7f5fe51
Bail out from the matching search if we exceed the match limits.
Matti Hamalainen <ccr@tnsp.org>
parents:
2271
diff
changeset
|
999 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1000 moffs1 += cnt; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1001 } |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1002 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1003 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1004 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
|
1005 moffs1++; |
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 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1008 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
|
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 |
2272
4f52b7f5fe51
Bail out from the matching search if we exceed the match limits.
Matti Hamalainen <ccr@tnsp.org>
parents:
2271
diff
changeset
|
1011 done: |
4f52b7f5fe51
Bail out from the matching search if we exceed the match limits.
Matti Hamalainen <ccr@tnsp.org>
parents:
2271
diff
changeset
|
1012 |
2274
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
1013 if (slow) |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
1014 dmPrint(0, "\n\n"); |
a4c1fafd442a
Add a progress indicator when "slow" matching is expected.
Matti Hamalainen <ccr@tnsp.org>
parents:
2273
diff
changeset
|
1015 |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1016 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
|
1017 { |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1018 DMMatchSeq *seq = &dmSequences[nmatch]; |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1019 |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1020 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
|
1021 dmCompareMatchPlaces); |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1022 } |
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1023 |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1024 // |
2396
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1025 // Count number of files |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1026 // |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1027 for (int nmatch = 0; nmatch < ndmSequences; nmatch++) |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1028 { |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1029 DMMatchSeq *seq = &dmSequences[nmatch]; |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1030 memset(fileFlags, 0, fileFlagsSize); |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1031 |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1032 for (int nplace = 0; nplace < seq->nplaces; nplace++) |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1033 { |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1034 DMMatchPlace *place = &seq->places[nplace]; |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1035 if (!fileFlags[place->file->index]) |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1036 { |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1037 fileFlags[place->file->index] = TRUE; |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1038 seq->nfiles++; |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1039 } |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1040 } |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1041 } |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1042 |
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1043 // |
2267
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1044 // 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
|
1045 // |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1046 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
|
1047 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
|
1048 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1049 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
|
1050 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1051 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
|
1052 |
2396
679732e4cfed
Implement counting of matching files for each match sequence.
Matti Hamalainen <ccr@tnsp.org>
parents:
2389
diff
changeset
|
1053 printf("\nSeq of %" DM_PRIu_SIZE_T " bytes in %d places (in %d files)\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
|
1054 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
|
1055 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1056 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
|
1057 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1058 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
|
1059 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
|
1060 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1061 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
|
1062 printf(" "); |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1063 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1064 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
|
1065 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
|
1066 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
|
1067 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1068 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
|
1069 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1070 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
|
1071 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
|
1072 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1073 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1074 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
|
1075 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
|
1076 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1077 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1078 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
|
1079 { |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1080 DMMatchPlace *place = &seq->places[nplace]; |
2270
0f0218dcccf8
More fixes to the matching sequence search functionality.
Matti Hamalainen <ccr@tnsp.org>
parents:
2269
diff
changeset
|
1081 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
|
1082 place->offs, |
2271
dcf9abeec930
Fix matched area end offset display.
Matti Hamalainen <ccr@tnsp.org>
parents:
2270
diff
changeset
|
1083 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
|
1084 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
|
1085 |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1086 } |
3739e2ac8bb1
Add 'beta' level feature to fanalyze, for finding matching byte sequences of minimum
Matti Hamalainen <ccr@tnsp.org>
parents:
2249
diff
changeset
|
1087 } |
1996 | 1088 } |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
1089 else |
1996 | 1090 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
1091 dmErrorMsg("Invalid operating mode?\n"); |
1996 | 1092 } |
1093 | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1094 out: |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1095 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
|
1096 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1097 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
|
1098 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
|
1099 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1100 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1101 return 0; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1102 } |