Mercurial > hg > dmlib
annotate tools/fanalyze.c @ 2234:ef1845cb436e
Improve help, cosmetics.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 15 Jun 2019 06:06:23 +0300 |
parents | ba639902d57c |
children | 2e656da1b10b |
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 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
13 #define SET_MAX_FILES 64 |
1996 | 14 #define SET_MAX_ELEMS 256 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
15 #define SET_MAX_VALUES 64 |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
16 #define SET_MAX_GREPLIST 64 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
17 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
18 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
19 /* Typedefs |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
20 */ |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
21 typedef struct |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
22 { |
1996 | 23 Uint8 stats[SET_MAX_ELEMS]; |
24 Uint8 variants, data; | |
25 int interest[16]; | |
26 int interestF[16]; | |
27 } DMCompElem; | |
28 | |
29 | |
30 typedef struct | |
31 { | |
32 int count; | |
33 Uint8 value; | |
34 } DMStatValue; | |
35 | |
36 | |
37 typedef struct | |
38 { | |
39 DMStatValue cv[SET_MAX_ELEMS]; | |
40 } DMStats; | |
41 | |
42 | |
43 typedef struct | |
44 { | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
45 char *filename; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
46 Uint8 *data; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
47 size_t size; // offset, crop_start, crop_end, doCrop? |
1996 | 48 DMStats stats; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
49 } DMSourceFile; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
50 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
51 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
52 enum |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
53 { |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
54 DMGV_UINT8 = 0, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
55 DMGV_UINT16_LE, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
56 DMGV_UINT16_BE, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
57 DMGV_UINT32_LE, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
58 DMGV_UINT32_BE, |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
59 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
60 DMGV_last |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
61 }; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
62 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
63 |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
64 enum |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
65 { |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
66 DMGS_HEX = 0, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
67 DMGS_DEC, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
68 DMGS_last |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
69 }; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
70 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
71 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
72 typedef struct |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
73 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
74 int type; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
75 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
|
76 int nvalues; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
77 Uint32 values[SET_MAX_GREPLIST]; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
78 BOOL vwildcards[SET_MAX_GREPLIST]; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
79 } DMGrepValue; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
80 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
81 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
82 typedef struct |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
83 { |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
84 char *name; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
85 Uint32 nmax; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
86 unsigned int bsize; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
87 } DMGrepType; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
88 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
89 |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
90 static const DMGrepType dmGrepTypes[DMGV_last] = |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
91 { |
2040
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
92 { "8bit (byte)" , (1ULL << 8) - 1, 1 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
93 { "16bit (word) LE" , (1ULL << 16) - 1, 2 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
94 { "16bit (word) BE" , (1ULL << 16) - 1, 2 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
95 { "32bit (word) LE" , (1ULL << 32) - 1, 4 }, |
3a7ce77c7f2d
Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents:
2035
diff
changeset
|
96 { "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
|
97 }; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
98 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
99 |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
100 typedef struct |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
101 { |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
102 char *name; |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
103 char *fmtPrefix; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
104 char *fmt; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
105 } DMGrepDisp; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
106 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
107 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
108 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
|
109 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
110 { "hex", "0", "x" }, |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
111 { "dec", "" , "d" }, |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
112 }; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
113 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
114 enum |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
115 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
116 FA_ANALYZE, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
117 FA_GREP, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
118 FA_OFFSET, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
119 }; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
120 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
121 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
122 /* Global variables |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
123 */ |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
124 int setMode = FA_ANALYZE; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
125 int nsrcFiles = 0; // Number of source files |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
126 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
|
127 DMStats totalStats; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
128 int nsetGrepValues = 0; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
129 DMGrepValue setGrepValues[SET_MAX_VALUES]; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
130 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
131 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
132 /* Arguments |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
133 */ |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
134 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
|
135 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
136 { 0, '?', "help", "Show this help", OPT_NONE }, |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
137 { 1, 'v', "verbose", "Be more verbose", OPT_NONE }, |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
138 { 2, 'g', "grep", "Binary grep <val>[,<val2>...][:<le|be>[8|16|32]]", OPT_ARGREQ }, |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
139 { 3, 'o', "offset", "Show data in offset <offs>[,<offs2>...][:<le|be>[8|16|32][d|x]]", 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
|
140 }; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
141 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
142 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
|
143 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
144 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
145 void argShowHelp() |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
146 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
147 dmPrintBanner(stdout, dmProgName, "[options] <input file #1> <input file #2> [...]"); |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
148 dmArgsPrintHelp(stdout, optList, optListN, 0); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
149 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
150 fprintf(stdout, |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
151 "\n" |
2234 | 152 "Fanalyze is a simplistic commandline tool to assist analysis of similarities\n" |
153 "between multiple files of same format (but different content). It provides\n" | |
154 "automatic analysis (default operating mode), binary grep functionality (-g)\n" | |
155 "and offset data display (-o)\n" | |
156 "\n" | |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
157 "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
|
158 "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
|
159 "-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
|
160 "and -g 0xe,0x1001,?,2023:le16 will match le16 value 000e 1001 ???? 07e7\n" |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
161 ); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
162 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
163 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
164 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
165 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
|
166 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
167 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
|
168 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
|
169 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
170 *mval = 0; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
171 return FALSE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
172 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
173 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
174 switch (type) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
175 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
176 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
|
177 *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
|
178 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
179 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
180 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
|
181 *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
|
182 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
183 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
184 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
|
185 *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
|
186 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
187 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
188 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
|
189 *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
|
190 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
191 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
192 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
|
193 *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
|
194 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
195 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
196 default: |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
197 *mval = 0; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
198 return FALSE; |
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 return TRUE; |
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 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
204 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
|
205 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
206 char mfmt[16]; |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
207 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
208 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
|
209 dmGrepDisp[node->disp].fmtPrefix, |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
210 dmGrepTypes[node->type].bsize * 2, |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
211 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
|
212 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
213 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
|
214 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
215 const char *veol = (n < node->nvalues - 1) ? " " : "\n"; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
216 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
217 if (match) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
218 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
219 Uint32 mval; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
220 dmGetData(node->type, file, offs + n, &mval); |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
221 dmPrint(1, 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
|
222 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
223 else |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
224 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
225 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
|
226 dmPrint(1, "?%s", veol); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
227 else |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
228 dmPrint(1, 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
|
229 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
230 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
231 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
232 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
233 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
234 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
|
235 { |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
236 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
|
237 char *vspec, *vstr, *vsep; |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
238 DMGrepValue val; |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
239 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
|
240 BOOL more; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
241 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
242 memset(&val, 0, sizeof(val)); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
243 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
244 if (setMode != FA_ANALYZE && setMode != mode) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
245 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
246 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
|
247 return DMERR_INVALID_ARGS; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
248 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
249 setMode = mode; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
250 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
251 // 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
|
252 if (specsep != NULL) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
253 { |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
254 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
|
255 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
|
256 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
257 else |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
258 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
259 vspec = NULL; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
260 vstr = dm_strdup(arg); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
261 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
262 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
263 // Parse spec if any |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
264 if (vspec != NULL) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
265 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
266 BOOL vendianess = TRUE; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
267 char *vtmp = vspec; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
268 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
269 // Get endianess specifier, if any |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
270 if (dm_strncasecmp(vtmp, "le", 2) == 0) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
271 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
272 vendianess = TRUE; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
273 vtmp += 2; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
274 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
275 else |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
276 if (dm_strncasecmp(vtmp, "be", 2) == 0) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
277 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
278 vendianess = FALSE; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
279 vtmp += 2; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
280 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
281 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
282 // Get value bit size |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
283 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
|
284 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
285 val.type = DMGV_UINT8; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
286 vtmp += 1; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
287 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
288 else |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
289 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
|
290 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
291 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
|
292 vtmp += 2; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
293 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
294 else |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
295 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
|
296 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
297 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
|
298 vtmp += 2; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
299 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
300 else |
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 ret = dmError(DMERR_INVALID_ARGS, |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
303 "Invalid grep type '%s'.\n", |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
304 vspec); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
305 goto out; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
306 } |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
307 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
308 switch (tolower(*vtmp)) |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
309 { |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
310 case 'd': |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
311 val.disp = DMGS_DEC; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
312 break; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
313 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
314 case 'x': case 'h': |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
315 val.disp = DMGS_HEX; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
316 break; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
317 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
318 case 0: |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
319 break; |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
320 |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
321 default: |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
322 ret = dmError(DMERR_INVALID_ARGS, |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
323 "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
|
324 vspec); |
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
325 goto out; |
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 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
328 |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
329 // 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
|
330 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
|
331 do |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
332 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
333 if (val.nvalues >= SET_MAX_GREPLIST) |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
334 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
335 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
|
336 "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
|
337 vstr); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
338 goto out; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
339 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
340 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
341 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
|
342 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
343 *vsep = 0; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
344 more = TRUE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
345 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
346 else |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
347 more = FALSE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
348 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
349 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
|
350 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
351 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
|
352 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
|
353 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
354 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
|
355 "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
|
356 goto out; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
357 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
358 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
359 else |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
360 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
|
361 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
362 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
|
363 "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
|
364 vtmp); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
365 goto out; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
366 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
367 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
368 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
|
369 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
370 if (more) |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
371 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
|
372 } while (more); |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
373 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
374 if (val.vwildcards[0]) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
375 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
376 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
|
377 "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
|
378 goto out; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
379 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
380 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
381 if (mode == FA_GREP) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
382 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
383 // Check if we need to guess size |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
384 if (val.type < 0) |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
385 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
386 for (int n = DMGV_last; n >= 0; n--) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
387 { |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
388 const DMGrepType *def = &dmGrepTypes[n]; |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
389 if (val.values[0] <= def->nmax) |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
390 val.type = n; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
391 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
392 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
393 |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
394 if (val.type < 0) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
395 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
396 ret = dmError(DMERR_INVALID_ARGS, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
397 "Could not guess value type for '%s'.\n", |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
398 arg); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
399 goto out; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
400 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
401 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
402 // Check range |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
403 for (int n = 0; n < val.nvalues; n++) |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
404 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
|
405 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
406 ret = dmError(DMERR_INVALID_ARGS, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
407 "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
|
408 val.values[n], 0, dmGrepTypes[val.type].nmax, |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
409 dmGrepTypes[val.type].name); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
410 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
411 goto out; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
412 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
413 } |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
414 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
415 if (mode == FA_OFFSET) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
416 { |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
417 if (val.type < 0) |
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
418 val.type = DMGV_UINT8; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
419 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
420 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
421 if (nsetGrepValues < SET_MAX_VALUES) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
422 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
423 DMGrepValue *node = &setGrepValues[nsetGrepValues++]; |
2228
02d17784fdef
Variables -> struct cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
2225
diff
changeset
|
424 memcpy(node, &val, sizeof(val)); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
425 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
426 if (mode == FA_GREP) |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
427 { |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
428 dmPrint(1, "Grep %s: ", |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
429 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
|
430 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
431 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
|
432 } |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
433 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
434 else |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
435 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
436 ret = dmError(DMERR_BOUNDS, |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
437 "Too many values specified (max %d).", |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
438 SET_MAX_VALUES); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
439 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
440 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
441 out: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
442 dmFree(vspec); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
443 dmFree(vstr); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
444 return ret; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
445 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
446 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
447 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
448 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
|
449 { |
1995
ea6337c873c6
Silence an unused function argument warning.
Matti Hamalainen <ccr@tnsp.org>
parents:
1685
diff
changeset
|
450 (void) optArg; |
ea6337c873c6
Silence an unused function argument warning.
Matti Hamalainen <ccr@tnsp.org>
parents:
1685
diff
changeset
|
451 |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
452 switch (optN) |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
453 { |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
454 case 0: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
455 argShowHelp(); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
456 exit(0); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
457 break; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
458 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
459 case 1: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
460 dmVerbosity++; |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
461 break; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
462 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
463 case 2: |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
464 return argParseGrepValue(optArg, FA_GREP) == DMERR_OK; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
465 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
466 case 3: |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
467 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
|
468 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
469 default: |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
470 dmErrorMsg("Unknown argument '%s'.\n", currArg); |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
471 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
|
472 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
473 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
474 return TRUE; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
475 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
476 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
477 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
478 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
|
479 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
480 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
|
481 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
482 DMSourceFile *file = &srcFiles[nsrcFiles++]; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
483 file->filename = currArg; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
484 return TRUE; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
485 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
486 else |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
487 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
488 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
|
489 SET_MAX_FILES); |
1996 | 490 return TRUE; |
491 } | |
492 } | |
493 | |
494 | |
495 void dmInitStats(DMStats *stats) | |
496 { | |
497 for (size_t n = 0; n < SET_MAX_ELEMS; n++) | |
498 { | |
499 stats->cv[n].count = 0; | |
500 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
|
501 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
502 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
503 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
504 |
1996 | 505 int dmCompareStatFunc(const void *va, const void *vb) |
506 { | |
507 const DMStatValue *pa = va, *pb = vb; | |
508 return pb->count - pa->count; | |
509 } | |
510 | |
511 | |
512 void dmPrintStats(DMStats *stats, const int nmax, const size_t size) | |
513 { | |
2011 | 514 qsort(&stats->cv, SET_MAX_ELEMS, sizeof(DMStatValue), dmCompareStatFunc); |
515 | |
1996 | 516 for (int n = 0; n < nmax; n++) |
517 { | |
2011 | 518 printf("$%02x (%d = %1.2f%%), ", |
1996 | 519 stats->cv[n].value, |
2011 | 520 stats->cv[n].count, |
1996 | 521 ((float) stats->cv[n].count * 100.0f) / (float) size); |
522 } | |
523 printf("\n\n"); | |
524 } | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
525 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
526 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
527 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
|
528 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
529 DMCompElem *compBuf = NULL; |
1996 | 530 size_t compBufSize = 0, totalSize = 0; |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
531 int res; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
532 |
2234 | 533 dmInitProg("fanalyze", "Simple tool for file format analysis", |
534 "0.4", NULL, NULL); | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
535 dmVerbosity = 1; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
536 |
1996 | 537 dmInitStats(&totalStats); |
538 | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
539 // Parse arguments |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
540 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
|
541 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
|
542 exit(1); |
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 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
|
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("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
|
547 goto out; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
548 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
549 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
550 // 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
|
551 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
|
552 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
553 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
|
554 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
|
555 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
556 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
|
557 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
|
558 goto out; |
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 |
1685
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
561 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
|
562 nfile + 1, file->filename, file->size); |
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
563 |
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
564 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
|
565 compBufSize = file->size; |
1996 | 566 |
567 totalSize += file->size; | |
2011 | 568 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
|
569 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
570 |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
571 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
572 // |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
573 // Check what operating mode we are in |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
574 // |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
575 if (setMode == FA_GREP) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
576 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
577 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
578 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
579 DMSourceFile *file = &srcFiles[nfile]; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
580 dmPrint(0, "\n%s\n", file->filename); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
581 |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
582 for (int n = 0; n < nsetGrepValues; n++) |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
583 { |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
584 DMGrepValue *node = &setGrepValues[n]; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
585 const DMGrepType *def = &dmGrepTypes[node->type]; |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
586 |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
587 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
|
588 { |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
589 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
|
590 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
|
591 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
|
592 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
593 Uint32 mval; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
594 dmGetData(node->type, file, offs + n, &mval); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
595 |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
596 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
|
597 { |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
598 match = FALSE; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
599 break; |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
600 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
601 } |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
602 |
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
603 if (match) |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
604 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
605 dmPrint(0, "%08x : ", offs); |
2225
837c79747ea4
Add functionality for grepping multiple consecutive values (8/16/32 le/be)
Matti Hamalainen <ccr@tnsp.org>
parents:
2045
diff
changeset
|
606 dmPrintGrepValueList(node, TRUE, file, offs); |
2028
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
607 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
608 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
609 } |
8a9ef75fd3cd
Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2011
diff
changeset
|
610 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
611 } |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
612 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
613 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
|
614 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
615 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
616 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
617 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
618 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
|
619 } |
1996 | 620 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
621 printf(" offset :"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
622 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
623 printf(" %03d ", nfile + 1); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
624 printf("\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
625 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
626 printf("=========="); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
627 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
628 printf("==========="); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
629 printf("\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
630 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
631 for (int n = 0; n < nsetGrepValues; n++) |
1996 | 632 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
633 DMGrepValue *node = &setGrepValues[n]; |
2045
1662730053d0
Implement controllable decimal/hexadecimal formatting for offset display mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
2042
diff
changeset
|
634 const DMGrepType *def = &dmGrepTypes[node->type]; |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
635 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
636 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
|
637 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
638 printf("%08x : ", node->values[nv]); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
639 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
640 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
641 { |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
642 DMSourceFile *file = &srcFiles[nfile]; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
643 Uint32 mval; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
644 char mstr[32]; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
645 int npad, nwidth; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
646 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
647 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
|
648 { |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
649 char mfmt[16]; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
650 nwidth = def->bsize * 2; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
651 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
|
652 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
|
653 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
654 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
|
655 } |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
656 else |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
657 { |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
658 strcpy(mstr, "----"); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
659 nwidth = 4; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
660 } |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
661 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
662 npad = (10 - nwidth) / 2; |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
663 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
|
664 fputc(' ', stdout); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
665 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
666 fputs(mstr, stdout); |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
667 |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
668 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
|
669 fputc(' ', stdout); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
670 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
671 |
2229
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
672 printf(" [%s]\n", |
72e15cc14927
Make the offset mode (-o) also support lists of offsets.
Matti Hamalainen <ccr@tnsp.org>
parents:
2228
diff
changeset
|
673 dmGrepDisp[node->disp].name); |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
674 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
675 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
676 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
677 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
678 if (setMode == FA_ANALYZE) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
679 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
680 // Allocate comparision buffer |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
681 // XXX: integer overflow? |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
682 dmPrint(2, "Allocating %d element (%d bytes) comparision buffer.\n", |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
683 compBufSize, compBufSize * sizeof(DMCompElem)); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
684 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
685 if ((compBuf = dmCalloc(compBufSize, sizeof(DMCompElem))) == NULL) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
686 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
687 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
|
688 goto out; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
689 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
690 |
2234 | 691 // |
692 // Basic file data comparision | |
693 // | |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
694 dmPrint(2, "Analyzing ..\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
695 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
696 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
697 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
698 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
699 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
|
700 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
701 Uint8 bv = file->data[offs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
702 totalStats.cv[bv].count++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
703 file->stats.cv[bv].count++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
704 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
705 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
706 for (size_t offs = 0; offs < compBufSize; offs++) |
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 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
|
709 compBuf[offs].stats[data]++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
710 } |
1996 | 711 } |
712 | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
713 for (size_t offs = 0; offs < compBufSize; offs++) |
1685
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
714 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
715 DMCompElem *el = &compBuf[offs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
716 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
|
717 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
718 if (el->stats[n] > 0) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
719 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
720 el->variants++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
721 el->data = n; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
722 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
723 } |
1685
904904f145b4
Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
1683
diff
changeset
|
724 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
725 |
2234 | 726 // |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
727 // Display results |
2234 | 728 // |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
729 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
|
730 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
731 DMCompElem *el = &compBuf[offs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
732 BOOL var = el->variants > 1; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
733 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
734 if (n == 0) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
735 printf("%08" DM_PRIx_SIZE_T " | ", offs); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
736 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
737 if (var) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
738 printf("[%2d] ", el->variants); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
739 else |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
740 printf(" %02x ", el->data); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
741 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
742 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
|
743 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
744 printf("\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
745 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
|
746 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
747 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
748 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
749 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
|
750 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
751 // Attempt further analysis |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
752 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
753 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
754 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
755 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
|
756 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
|
757 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
758 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
|
759 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
760 for (int variant = 3; variant >= 0; variant--) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
761 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
762 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
|
763 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
|
764 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
765 for (size_t n = 0; n < nmax; n++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
766 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
767 size_t boffs = (variant & 1) ? n : nmax - n; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
768 |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
769 tmp <<= 8; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
770 tmp |= file->data[offs + boffs]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
771 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
772 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
773 if (file->size - tmp < 32) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
774 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
775 elem->interest[variant] += 32 - (file->size - tmp); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
776 elem->interestF[variant]++; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
777 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
778 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
779 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
780 } |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
781 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
782 printf("\nMore findings:\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
783 for (size_t offs = 0; offs + 4 < compBufSize; offs++) |
1996 | 784 { |
785 DMCompElem *elem = &compBuf[offs]; | |
786 | |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
787 for (int variant = 0; variant < 4; variant++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
788 if (elem->interestF[variant] > 0) |
1996 | 789 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
790 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
|
791 offs, variant, |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
792 elem->interestF[variant], elem->interest[variant]); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
793 } |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
794 } |
1996 | 795 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
796 printf("\nGlobal most used bytes:\n"); |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
797 dmPrintStats(&totalStats, 16, totalSize); |
1996 | 798 |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
799 for (int nfile = 0; nfile < nsrcFiles; nfile++) |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
800 { |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
801 DMSourceFile *file = &srcFiles[nfile]; |
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
802 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
|
803 dmPrintStats(&file->stats, 16, file->size); |
1996 | 804 } |
805 } | |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
806 else |
1996 | 807 { |
2034
45ad06bb60c4
Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents:
2032
diff
changeset
|
808 dmErrorMsg("Invalid operating mode?\n"); |
1996 | 809 } |
810 | |
1682
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
811 out: |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
812 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
|
813 { |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
814 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
|
815 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
|
816 } |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
817 |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
818 return 0; |
2cfb4806cf71
Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
819 } |