This source file includes following definitions.
- usage
- main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <string.h>
27 void usage(void) {
28 fprintf(stderr,"usage: dumpchk [-vxworks|-dryos|-fix] [-quiet] <dump>\n");
29 exit(1);
30 }
31
32
33
34
35 const char vxworks_start_sig[] = {
36 0x02, 0x00, 0xA0, 0xE3,
37 0x12, 0x00, 0x00, 0xEA,
38 'C', 'o', 'p', 'y', 'r', 'i', 'g', 'h'
39 };
40
41
42 const char dryos_start_sig[] = {
43 0x01, 0x00, 0x00, 0xEA,
44 'g', 'a','o', 'n', 'i', 's', 'o' ,'y'
45 };
46
47
48 #define CHECK_FIND 0
49 #define CHECK_VXWORKS 1
50 #define CHECK_DRYOS 2
51 int main(int argc, char **argv) {
52 int retval = 0;
53 int checkmode = CHECK_FIND;
54 int fix = 0;
55 int quiet = 0;
56 char *dumpname = NULL;
57 FILE *dumpfile;
58 int i,size;
59 for(i = 1; i < argc; i++) {
60 if ( strcmp(argv[i],"-vxworks") == 0 ) {
61 checkmode = CHECK_VXWORKS;
62 }
63 else if (strcmp(argv[i],"-dryos") == 0 ) {
64 checkmode = CHECK_DRYOS;
65 }
66 else if (strcmp(argv[i],"-fix") == 0 ) {
67 fix = 1;
68 }
69 else if (strcmp(argv[i],"-quiet") == 0 ) {
70 quiet = 1;
71 }
72 else if ( argv[i][0] == '-' ) {
73 fprintf(stderr,"%s unknown option %s\n",argv[0],argv[i]);
74 usage();
75 }
76 else {
77 if (!dumpname)
78 dumpname=argv[i];
79 else {
80 fprintf(stderr,"%s unexpected %s\n",argv[0],argv[i]);
81 usage();
82 }
83 }
84 }
85 if(!dumpname) {
86 usage();
87 }
88 dumpfile = fopen(dumpname,"rb");
89 if(!dumpfile) {
90 fprintf(stderr,"%s unable to open %s\n",argv[0],dumpname);
91 usage();
92 }
93 fseek(dumpfile,0,SEEK_END);
94 size=ftell(dumpfile);
95 fseek(dumpfile,0,SEEK_SET);
96
97 if( checkmode == CHECK_FIND) {
98 char *buf;
99 const char *found=NULL;
100 if(size < (int)sizeof(vxworks_start_sig) || size < (int)sizeof(dryos_start_sig)) {
101 printf("%s TOO SMALL: 0x%X (%d) bytes\n",dumpname,size,size);
102 fclose(dumpfile);
103 return 1;
104 }
105 buf=malloc(size);
106 if(!buf) {
107 fprintf(stderr,"%s out of memory\n",argv[0]);
108 fclose(dumpfile);
109 exit(2);
110 }
111 fread(buf, 1, size, dumpfile);
112 for(i=0; i<size; i++) {
113 if( i+(int)sizeof(vxworks_start_sig) < size) {
114 if(memcmp(buf+i,vxworks_start_sig,sizeof(vxworks_start_sig)) == 0) {
115 found = "VXWORKS";
116 }
117 }
118 if( i+(int)sizeof(dryos_start_sig) < size) {
119 if(memcmp(buf+i,dryos_start_sig,sizeof(dryos_start_sig)) == 0) {
120 found = "DRYOS";
121 }
122 }
123 if(found) {
124 printf("%s %s ",dumpname,found);
125 if(i) {
126 printf("@0x%X (%d) REMAINING 0x%X (%d) bytes\n",i,i,size-i,size-i);
127 }
128 else {
129 printf("@Start SIZE 0x%X (%d)\n",size,size);
130 }
131 break;
132 }
133 }
134 if(i==size) {
135 printf("%s 0x%X (%d) bytes no sig found\n",dumpname,size,size);
136 retval = 0;
137 }
138 fclose(dumpfile);
139 if(fix && i && i < size) {
140 dumpfile = fopen(dumpname,"wb");
141 printf("fix: %s trim 0x%X (%d) ...",dumpname,i,i);
142 if(!dumpfile) {
143 fprintf(stderr,"\n%s unable to open %s for write\n",argv[0],dumpname);
144 }
145 else {
146 fwrite(buf+i,1,size-i,dumpfile);
147 printf(" wrote 0x%X (%d)\n",size-i,size-i);
148 }
149 }
150 free(buf);
151 }
152 else {
153 const char *sig=vxworks_start_sig,*osname = "VXWORKS";
154 char *buf;
155 int sigsize = sizeof(vxworks_start_sig);
156
157 if (checkmode == CHECK_DRYOS) {
158 sig = dryos_start_sig;
159 sigsize = sizeof(dryos_start_sig);
160 osname = "DRYOS";
161 }
162 buf = malloc(sigsize);
163 if(!buf) {
164 fprintf(stderr,"%s out of memory\n",argv[0]);
165 fclose(dumpfile);
166 exit(2);
167 }
168 if( (int)fread(buf,1,sigsize,dumpfile) != sigsize) {
169 retval = 0;
170 }
171 else {
172 retval = (memcmp(buf,sig,sigsize) == 0);
173 }
174 free(buf);
175
176 if(!quiet) {
177 if(retval) {
178 printf("%s valid %s 0x%X (%d) bytes\n",dumpname,osname,size,size);
179 }
180 else {
181 printf("%s NOT valid %s 0x%X (%d) bytes\n",dumpname,osname,size,size);
182 }
183 }
184 }
185 fclose(dumpfile);
186 return retval == 0;
187 }