annotate tools/fanalyze.c @ 2041:493d79ea50a8

Fix uninitialized value warnings (not possible in practice, but gcc moans anyway.)
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 30 Nov 2018 06:52:32 +0200
parents 3a7ce77c7f2d
children 45d9db50d996
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 /*
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 * Fanalyze - Analyze similarities between multiple files
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
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 * (C) Copyright 2018 Tecnic Software productions (TNSP)
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
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
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
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16
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 /* Typedefs
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 */
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 typedef struct
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21 {
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
22 Uint8 stats[SET_MAX_ELEMS];
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
23 Uint8 variants, data;
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
24 int interest[16];
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
25 int interestF[16];
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
26 } DMCompElem;
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
27
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
28
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
29 typedef struct
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
30 {
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
31 int count;
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
32 Uint8 value;
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
33 } DMStatValue;
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
34
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
35
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
36 typedef struct
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
37 {
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
38 DMStatValue cv[SET_MAX_ELEMS];
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
39 } DMStats;
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
40
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
41
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
42 typedef struct
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
43 {
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 char *filename;
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 Uint8 *data;
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
46 size_t size; // offset, crop_start, crop_end, doCrop?
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
47 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
48 } DMSourceFile;
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
51 enum
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
52 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
53 DMGV_uint8 = 0,
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
54 DMGV_uint16_le,
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
55 DMGV_uint16_be,
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
56 DMGV_uint32_le,
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
57 DMGV_uint32_be,
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
58
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
59 DMGV_last
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
60 };
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 typedef struct
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
64 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
65 int type;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
66 Uint32 value;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
67 } DMGrepValue;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
68
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
69
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
70 typedef struct
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
71 {
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
72 char *name;
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
73 Uint32 nmax;
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
74 unsigned int bsize;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
75 } DMGrepDef;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
76
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
77
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
78 static const DMGrepDef dmGrepTypes[DMGV_last] =
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
79 {
2040
3a7ce77c7f2d Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents: 2035
diff changeset
80 { "8bit (byte)" , (1ULL << 8) - 1, 1 },
3a7ce77c7f2d Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents: 2035
diff changeset
81 { "16bit (word) LE" , (1ULL << 16) - 1, 2 },
3a7ce77c7f2d Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents: 2035
diff changeset
82 { "16bit (word) BE" , (1ULL << 16) - 1, 2 },
3a7ce77c7f2d Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents: 2035
diff changeset
83 { "32bit (word) LE" , (1ULL << 32) - 1, 4 },
3a7ce77c7f2d Fix integer overflows vs. shifts.
Matti Hamalainen <ccr@tnsp.org>
parents: 2035
diff changeset
84 { "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
85 };
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
86
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
87
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
88 enum
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
89 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
90 FA_ANALYZE,
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
91 FA_GREP,
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
92 FA_OFFSET,
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
93 };
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
94
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
95
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96 /* Global variables
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
97 */
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
98 int setMode = FA_ANALYZE;
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
99 int nsrcFiles = 0; // Number of source files
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
100 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
101 DMStats totalStats;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
102 int nsetGrepValues = 0;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
103 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
104
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106 /* Arguments
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 */
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108 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
109 {
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110 { 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
111 { 1, 'v', "verbose", "Be more verbose", OPT_NONE },
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
112 { 2, 'g', "grep", "Binary grep <val>[,<le|be>[8|16|32]]", OPT_ARGREQ },
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
113 { 3, 'o', "offset", "Show data in offset <offset>,<le|be>[8|16|32]]", 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
114 };
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116 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
117
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
118
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119 void argShowHelp()
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
120 {
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
121 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
122 dmArgsPrintHelp(stdout, optList, optListN, 0);
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
123 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
124
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
125
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
126 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
127 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
128 const char *sep = strchr(arg, ',');
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
129 char *vspec, *vstr;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
130 int vtype = -1, ret = DMERR_OK;
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
131 Uint32 vval;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
132
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
133 if (setMode != FA_ANALYZE && setMode != mode)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
134 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
135 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
136 return DMERR_INVALID_ARGS;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
137 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
138 setMode = mode;
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
139
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
140 // Do we have spec?
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
141 if (sep != NULL)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
142 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
143 vspec = dm_strdup_trim(sep + 1, DM_TRIM_BOTH);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
144 vstr = dm_strndup_trim(arg, sep - arg, DM_TRIM_BOTH);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
145 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
146 else
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
147 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
148 vspec = NULL;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
149 vstr = dm_strdup(arg);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
150 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
151
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
152 // Parse spec if any
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
153 if (vspec != NULL)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
154 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
155 BOOL vendianess = TRUE;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
156 char *vtmp = vspec;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
157
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
158 // Get endianess specifier, if any
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
159 if (dm_strncasecmp(vtmp, "le", 2) == 0)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
160 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
161 vendianess = TRUE;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
162 vtmp += 2;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
163 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
164 else
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
165 if (dm_strncasecmp(vtmp, "be", 2) == 0)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
166 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
167 vendianess = FALSE;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
168 vtmp += 2;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
169 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
170
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
171 // Get value bit size
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
172 if (strcmp(vtmp, "8") == 0)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
173 vtype = DMGV_uint8;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
174 else
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
175 if (strcmp(vtmp, "16") == 0)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
176 vtype = vendianess ? DMGV_uint16_le : DMGV_uint16_be;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
177 else
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
178 if (strcmp(vtmp, "32") == 0)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
179 vtype = vendianess ? DMGV_uint32_le : DMGV_uint32_be;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
180 else
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
181 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
182 ret = dmError(DMERR_INVALID_ARGS,
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
183 "Invalid grep type '%s'.\n",
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
184 vspec);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
185 goto out;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
186 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
187 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
188
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
189 // Get value
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
190 if (!dmGetIntVal(vstr, &vval, NULL))
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
191 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
192 ret = dmError(DMERR_INVALID_ARGS,
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
193 "Not a valid integer value '%s'.\n",
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
194 vstr);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
195 goto out;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
196 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
197
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
198 if (mode == FA_GREP)
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
199 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
200 // Check if we need to guess size
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
201 if (vtype < 0)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
202 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
203 for (int n = DMGV_last; n >= 0; n--)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
204 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
205 const DMGrepDef *def = &dmGrepTypes[n];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
206 if (vval <= def->nmax)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
207 vtype = n;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
208 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
209 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
210
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
211 if (vtype < 0)
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
212 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
213 ret = dmError(DMERR_INVALID_ARGS,
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
214 "Could not guess value type for '%s'.\n",
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
215 arg);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
216 goto out;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
217 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
218
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
219 // Check range
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
220 if (vval > dmGrepTypes[vtype].nmax)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
221 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
222 ret = dmError(DMERR_INVALID_ARGS,
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
223 "Integer value %d <= %d <= %d out of range for type %s.\n",
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
224 vval, 0, dmGrepTypes[vtype].nmax, dmGrepTypes[vtype].name);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
225
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
226 goto out;
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
227 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
228 }
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
229 else
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
230 if (mode == FA_OFFSET)
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
231 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
232 if (vtype < 0)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
233 vtype = DMGV_uint8;
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
234 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
235
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
236 if (nsetGrepValues < SET_MAX_VALUES)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
237 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
238 DMGrepValue *node = &setGrepValues[nsetGrepValues++];
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
239 node->type = vtype;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
240 node->value = vval;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
241
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
242 dmMsg(1, "Grep value %s : %d / 0x%x\n",
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
243 dmGrepTypes[vtype].name,
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
244 vval, vval);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
245 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
246 else
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
247 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
248 ret = dmError(DMERR_BOUNDS,
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
249 "Too many values specified (max %d).",
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
250 SET_MAX_VALUES);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
251 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
252
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
253 out:
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
254 dmFree(vspec);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
255 dmFree(vstr);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
256 return ret;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
257 }
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
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
260 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
261 {
1995
ea6337c873c6 Silence an unused function argument warning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1685
diff changeset
262 (void) optArg;
ea6337c873c6 Silence an unused function argument warning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1685
diff changeset
263
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
264 switch (optN)
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
265 {
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
266 case 0:
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
267 argShowHelp();
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
268 exit(0);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
269 break;
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
270
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
271 case 1:
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
272 dmVerbosity++;
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
273 break;
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
274
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
275 case 2:
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
276 return argParseGrepValue(optArg, FA_GREP) == DMERR_OK;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
277
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
278 case 3:
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
279 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
280
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
281 default:
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
282 dmErrorMsg("Unknown argument '%s'.\n", currArg);
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
283 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
284 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
285
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
286 return TRUE;
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
287 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
288
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
289
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
290 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
291 {
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
292 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
293 {
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
294 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
295 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
296 return TRUE;
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
297 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
298 else
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
299 {
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
300 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
301 SET_MAX_FILES);
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
302 return TRUE;
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
303 }
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
304 }
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
305
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
306
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
307 void dmInitStats(DMStats *stats)
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
308 {
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
309 for (size_t n = 0; n < SET_MAX_ELEMS; n++)
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
310 {
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
311 stats->cv[n].count = 0;
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
312 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
313 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
314 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
315
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
316
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
317 int dmCompareStatFunc(const void *va, const void *vb)
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
318 {
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
319 const DMStatValue *pa = va, *pb = vb;
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
320 return pb->count - pa->count;
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
321 }
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
322
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
323
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
324 void dmPrintStats(DMStats *stats, const int nmax, const size_t size)
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
325 {
2011
8e38fa3c4f98 Fix use of qsort().
Matti Hamalainen <ccr@tnsp.org>
parents: 1996
diff changeset
326 qsort(&stats->cv, SET_MAX_ELEMS, sizeof(DMStatValue), dmCompareStatFunc);
8e38fa3c4f98 Fix use of qsort().
Matti Hamalainen <ccr@tnsp.org>
parents: 1996
diff changeset
327
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
328 for (int n = 0; n < nmax; n++)
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
329 {
2011
8e38fa3c4f98 Fix use of qsort().
Matti Hamalainen <ccr@tnsp.org>
parents: 1996
diff changeset
330 printf("$%02x (%d = %1.2f%%), ",
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
331 stats->cv[n].value,
2011
8e38fa3c4f98 Fix use of qsort().
Matti Hamalainen <ccr@tnsp.org>
parents: 1996
diff changeset
332 stats->cv[n].count,
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
333 ((float) stats->cv[n].count * 100.0f) / (float) size);
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
334 }
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
335 printf("\n\n");
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
336 }
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
337
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
338
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
339 BOOL dmGetData(const int type, const DMSourceFile *file, const size_t offs, Uint32 *mval)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
340 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
341 Uint8 *data = file->data + offs;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
342 if (offs + dmGrepTypes[type].bsize >= file->size)
2041
493d79ea50a8 Fix uninitialized value warnings (not possible in practice, but gcc moans anyway.)
Matti Hamalainen <ccr@tnsp.org>
parents: 2040
diff changeset
343 {
493d79ea50a8 Fix uninitialized value warnings (not possible in practice, but gcc moans anyway.)
Matti Hamalainen <ccr@tnsp.org>
parents: 2040
diff changeset
344 *mval = 0;
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
345 return FALSE;
2041
493d79ea50a8 Fix uninitialized value warnings (not possible in practice, but gcc moans anyway.)
Matti Hamalainen <ccr@tnsp.org>
parents: 2040
diff changeset
346 }
493d79ea50a8 Fix uninitialized value warnings (not possible in practice, but gcc moans anyway.)
Matti Hamalainen <ccr@tnsp.org>
parents: 2040
diff changeset
347
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
348 switch (type)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
349 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
350 case DMGV_uint8:
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
351 *mval = *((uint8_t *) data);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
352 break;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
353
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
354 case DMGV_uint16_le:
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
355 *mval = DM_LE16_TO_NATIVE(*((Uint16 *) data));
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
356 break;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
357
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
358 case DMGV_uint16_be:
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
359 *mval = DM_BE16_TO_NATIVE(*((Uint16 *) data));
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
360 break;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
361
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
362 case DMGV_uint32_le:
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
363 *mval = DM_LE32_TO_NATIVE(*((Uint32 *) data));
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
364 break;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
365
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
366 case DMGV_uint32_be:
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
367 *mval = DM_BE32_TO_NATIVE(*((Uint32 *) data));
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
368 break;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
369
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
370 default:
2041
493d79ea50a8 Fix uninitialized value warnings (not possible in practice, but gcc moans anyway.)
Matti Hamalainen <ccr@tnsp.org>
parents: 2040
diff changeset
371 *mval = 0;
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
372 return FALSE;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
373 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
374 return TRUE;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
375 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
376
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
377
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
378 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
379 {
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
380 DMCompElem *compBuf = NULL;
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
381 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
382 int res;
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
383
2035
472ca1dbc2d3 Bump version.
Matti Hamalainen <ccr@tnsp.org>
parents: 2034
diff changeset
384 dmInitProg("fanalyze", "File format analyzer", "0.3", 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
385 dmVerbosity = 1;
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
386
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
387 dmInitStats(&totalStats);
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
388
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
389 // Parse arguments
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
390 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
391 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
392 exit(1);
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
393
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
394 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
395 {
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
396 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
397 goto out;
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
398 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
399
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
400 // 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
401 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
402 {
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
403 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
404 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
405 {
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
406 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
407 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
408 goto out;
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
409 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
410
1685
904904f145b4 Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 1683
diff changeset
411 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
412 nfile + 1, file->filename, file->size);
904904f145b4 Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 1683
diff changeset
413
904904f145b4 Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 1683
diff changeset
414 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
415 compBufSize = file->size;
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
416
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
417 totalSize += file->size;
2011
8e38fa3c4f98 Fix use of qsort().
Matti Hamalainen <ccr@tnsp.org>
parents: 1996
diff changeset
418 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
419 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
420
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
421
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
422 //
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
423 // Check what operating mode we are in
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
424 //
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
425 if (setMode == FA_GREP)
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
426 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
427 for (int nfile = 0; nfile < nsrcFiles; nfile++)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
428 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
429 DMSourceFile *file = &srcFiles[nfile];
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
430 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
431
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
432 for (int n = 0; n < nsetGrepValues; n++)
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 DMGrepValue *node = &setGrepValues[n];
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
435 const DMGrepDef *def = &dmGrepTypes[node->type];
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
436
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
437 for (size_t offs = 0; offs + def->bsize < file->size; offs++)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
438 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
439 Uint32 mval;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
440 dmGetData(node->type, file, offs, &mval);
2028
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
441
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
442 if (mval == node->value)
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
443 {
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
444 dmPrint(0, "%08x : %s match %d / 0x%x\n",
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
445 offs, def->name, mval, mval);
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 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
448 }
8a9ef75fd3cd Implemement simple binary grep functionality in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2011
diff changeset
449 }
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
450 }
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
451 else
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
452 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
453 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
454 for (int nfile = 0; nfile < nsrcFiles; nfile++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
455 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
456 DMSourceFile *file = &srcFiles[nfile];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
457 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
458 }
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
459
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
460 printf(" offset :");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
461 for (int nfile = 0; nfile < nsrcFiles; nfile++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
462 printf(" %03d ", nfile + 1);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
463 printf("\n");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
464
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
465 printf("==========");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
466 for (int nfile = 0; nfile < nsrcFiles; nfile++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
467 printf("===========");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
468 printf("\n");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
469
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
470 for (int n = 0; n < nsetGrepValues; n++)
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
471 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
472 DMGrepValue *node = &setGrepValues[n];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
473 const DMGrepDef *def = &dmGrepTypes[node->type];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
474 printf("%08x : ", node->value);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
475
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
476 for (int nfile = 0; nfile < nsrcFiles; nfile++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
477 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
478 DMSourceFile *file = &srcFiles[nfile];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
479 Uint32 mval;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
480 char mfmt[32];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
481 int npad, nwidth;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
482
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
483 if (dmGetData(node->type, file, node->value, &mval))
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
484 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
485 snprintf(mfmt, sizeof(mfmt), "%%0%dx", def->bsize * 2);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
486 nwidth = def->bsize * 2;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
487 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
488 else
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
489 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
490 strcpy(mfmt, "----");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
491 nwidth = 4;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
492 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
493
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
494 npad = (10 - nwidth) / 2;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
495 for (int q = 0; q < npad; q++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
496 putchar(' ');
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
497
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
498 printf(mfmt, mval);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
499
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
500 for (int q = 0; q < npad; q++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
501 putchar(' ');
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
502 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
503 printf("\n");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
504 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
505 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
506 else
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
507 if (setMode == FA_ANALYZE)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
508 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
509 // Allocate comparision buffer
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
510 // XXX: integer overflow?
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
511 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
512 compBufSize, compBufSize * sizeof(DMCompElem));
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
513
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
514 if ((compBuf = dmCalloc(compBufSize, sizeof(DMCompElem))) == NULL)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
515 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
516 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
517 goto out;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
518 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
519
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
520 // Begin analyzing ..
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
521 dmPrint(2, "Analyzing ..\n");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
522 for (int nfile = 0; nfile < nsrcFiles; nfile++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
523 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
524 DMSourceFile *file = &srcFiles[nfile];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
525
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
526 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
527 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
528 Uint8 bv = file->data[offs];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
529 totalStats.cv[bv].count++;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
530 file->stats.cv[bv].count++;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
531 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
532
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
533 for (size_t offs = 0; offs < compBufSize; offs++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
534 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
535 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
536 compBuf[offs].stats[data]++;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
537 }
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
538 }
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
539
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
540 for (size_t offs = 0; offs < compBufSize; offs++)
1685
904904f145b4 Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 1683
diff changeset
541 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
542 DMCompElem *el = &compBuf[offs];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
543 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
544 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
545 if (el->stats[n] > 0)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
546 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
547 el->variants++;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
548 el->data = n;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
549 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
550 }
1685
904904f145b4 Various fixes in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 1683
diff changeset
551 }
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
552
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
553 // Display results
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
554 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
555 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
556 DMCompElem *el = &compBuf[offs];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
557 BOOL var = el->variants > 1;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
558
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
559 if (n == 0)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
560 printf("%08" DM_PRIx_SIZE_T " | ", offs);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
561
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
562 if (var)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
563 printf("[%2d] ", el->variants);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
564 else
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
565 printf(" %02x ", el->data);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
566
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
567 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
568 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
569 printf("\n");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
570 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
571 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
572 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
573
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
574 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
575
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
576 // Attempt further analysis
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
577 for (int nfile = 0; nfile < nsrcFiles; nfile++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
578 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
579 DMSourceFile *file = &srcFiles[nfile];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
580 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
581 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
582 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
583 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
584
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
585 for (int variant = 3; variant >= 0; variant--)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
586 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
587 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
588 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
589
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
590 for (size_t n = 0; n < nmax; n++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
591 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
592 size_t boffs = (variant & 1) ? n : nmax - n;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
593
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
594 tmp <<= 8;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
595 tmp |= file->data[offs + boffs];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
596 }
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
597
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
598 if (file->size - tmp < 32)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
599 {
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
600 elem->interest[variant] += 32 - (file->size - tmp);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
601 elem->interestF[variant]++;
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
602 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
603 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
604 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
605 }
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
606
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
607 printf("\nMore findings:\n");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
608 for (size_t offs = 0; offs + 4 < compBufSize; offs++)
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
609 {
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
610 DMCompElem *elem = &compBuf[offs];
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
611
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
612 for (int variant = 0; variant < 4; variant++)
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
613 if (elem->interestF[variant] > 0)
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
614 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
615 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
616 offs, variant,
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
617 elem->interestF[variant], elem->interest[variant]);
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
618 }
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
619 }
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
620
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
621 printf("\nGlobal most used bytes:\n");
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
622 dmPrintStats(&totalStats, 16, totalSize);
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
623
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
624 for (int nfile = 0; nfile < nsrcFiles; nfile++)
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 DMSourceFile *file = &srcFiles[nfile];
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
627 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
628 dmPrintStats(&file->stats, 16, file->size);
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
629 }
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
630 }
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
631 else
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
632 {
2034
45ad06bb60c4 Implement offset dump mode in fanalyze.
Matti Hamalainen <ccr@tnsp.org>
parents: 2032
diff changeset
633 dmErrorMsg("Invalid operating mode?\n");
1996
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
634 }
4a4c3e15b8c2 Add more analyzing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1995
diff changeset
635
1682
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
636 out:
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
637 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
638 {
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
639 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
640 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
641 }
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
642
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
643 return 0;
2cfb4806cf71 Add simple and naively implemented multi-file bindiff type file analyzer utility 'fanalyze'.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
644 }