FreeCalypso > hg > freecalypso-reveng
annotate pirollback/dumpjournal.c @ 207:d12a3207b1aa
D-Sample 20020917 firmware analysis
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Fri, 01 Jan 2016 23:24:05 +0000 |
parents | 79a0897dee7b |
children |
rev | line source |
---|---|
47
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 #include <stdio.h> |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 #include <stdlib.h> |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 #include <string.h> |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 #include <strings.h> |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 #include "types.h" |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 #include "struct.h" |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 #include "pathname.h" |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 extern char *imgfile; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 extern struct inode_info inode[]; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 extern int last_inode; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 extern int journal_start_ino; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 dump_inode(ino) |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 { |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 struct inode_info *inf; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 char pathname[PATHNAME_BUF_SIZE]; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 int typechar, delchar; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 inf = inode + ino; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 switch (inf->type) { |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 case 0xE1: |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 typechar = 'j'; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 break; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 case 0xF1: |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 typechar = 'f'; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 break; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 case 0xF2: |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 typechar = 'd'; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 break; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 case 0xF4: |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 typechar = '.'; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 break; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 default: |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 fprintf(stderr, "dumping inode #%x: unexpected type %02X\n", |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 ino, inf->type); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 exit(1); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 } |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 delchar = inf->flash->type ? ' ' : '~'; |
48
79a0897dee7b
pirollback dumpjournal utility: print some additional info
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
47
diff
changeset
|
40 if (inf->type == 0xF4) |
79a0897dee7b
pirollback dumpjournal utility: print some additional info
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
47
diff
changeset
|
41 sprintf(pathname, "parent: %x", inf->parent); |
79a0897dee7b
pirollback dumpjournal utility: print some additional info
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
47
diff
changeset
|
42 else if (pathname_of_inode(ino, pathname) < 0) |
47
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 strcpy(pathname, "-nopath-"); |
48
79a0897dee7b
pirollback dumpjournal utility: print some additional info
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
47
diff
changeset
|
44 printf("#%04X @%06X: %c%c %s\n", ino, inf->offset, typechar, delchar, |
79a0897dee7b
pirollback dumpjournal utility: print some additional info
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
47
diff
changeset
|
45 pathname); |
47
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 } |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 main(argc, argv) |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 char **argv; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 { |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 int ino; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 if (argc != 2) { |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 fprintf(stderr, "usage: %s ffs-image\n", argv[0]); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 exit(1); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 } |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 imgfile = argv[1]; |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 read_img_file(); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 read_inodes(); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 walk_tree(); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 check_object_names(); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 parse_journal(); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 check_object_names(); /* rerun for "undeleted" objects */ |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
64 for (ino = journal_start_ino; ino <= last_inode; ino++) |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
65 dump_inode(ino); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
66 exit(0); |
3b6296382e24
pirollback: dumpjournal utility written, works
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 } |