mirror of https://github.com/x64dbg/btparser
461 lines
14 KiB
Plaintext
461 lines
14 KiB
Plaintext
|
1:
|
||
|
2:
|
||
|
3:
|
||
|
4:
|
||
|
5:
|
||
|
6:
|
||
|
7:
|
||
|
8:
|
||
|
9:
|
||
|
10:
|
||
|
11:
|
||
|
12:
|
||
|
13:
|
||
|
14:
|
||
|
15:
|
||
|
16:
|
||
|
17: BitfieldRightToLeft ( ) ;
|
||
|
18: BitfieldDisablePadding ( ) ;
|
||
|
19:
|
||
|
20: string BootID ( unsigned char boot_id ) {
|
||
|
21: string ret ;
|
||
|
22:
|
||
|
23: if ( boot_id & 0x80 )
|
||
|
24: Strcat ( ret , "Bootable" ) ;
|
||
|
25: else
|
||
|
26: Strcat ( ret , "Not bootable" ) ;
|
||
|
27:
|
||
|
28: return ret ;
|
||
|
29: }
|
||
|
30:
|
||
|
31:
|
||
|
32:
|
||
|
33: string PartitionID ( unsigned char ptype ) {
|
||
|
34: switch ( ptype ) {
|
||
|
35: case 0 :
|
||
|
36: return "Empty" ;
|
||
|
37: case 1 :
|
||
|
38: return "DOS 12-bit FAT" ;
|
||
|
39: case 2 :
|
||
|
40: return "XENIX root" ;
|
||
|
41: case 3 :
|
||
|
42: return "XENIX /usr" ;
|
||
|
43: case 4 :
|
||
|
44: return "DOS 3.0+ 16-bit FAT (up to 32M)" ;
|
||
|
45: case 5 :
|
||
|
46: return "DOS 3.3+ Extended Partition" ;
|
||
|
47: case 6 :
|
||
|
48: return "DOS 3.31+ 16-bit FAT (over 32M)" ;
|
||
|
49: case 7 :
|
||
|
50: return "OS/2 IFS (e.g., HPFS), Windows NT NTFS, exFAT, Advanced Unix, QNX2.x pre-1988 (see below under IDs 4d-4f)" ;
|
||
|
51: case 8 :
|
||
|
52: return "OS/2 (v1.0-1.3 only), AIX boot partition, SplitDrive, Commodore DOS, DELL partition spanning multiple drives, QNX 1.x and 2.x (\"qny\")" ;
|
||
|
53: case 9 :
|
||
|
54: return "AIX data partition, Coherent filesystem, QNX 1.x and 2.x (\"qnz\")" ;
|
||
|
55: case 10 :
|
||
|
56: return "OS/2 Boot Manager, Coherent swap partition, OPUS" ;
|
||
|
57: case 11 :
|
||
|
58: return "WIN95 OSR2 FAT32" ;
|
||
|
59: case 12 :
|
||
|
60: return "WIN95 OSR2 FAT32, LBA-mapped" ;
|
||
|
61: case 13 :
|
||
|
62: return "SILICON SAFE" ;
|
||
|
63: case 14 :
|
||
|
64: return "WIN95: DOS 16-bit FAT, LBA-mapped" ;
|
||
|
65: case 15 :
|
||
|
66: return "WIN95: Extended partition, LBA-mapped" ;
|
||
|
67: case 16 :
|
||
|
68: return "OPUS (?)" ;
|
||
|
69: case 17 :
|
||
|
70: return "Hidden DOS 12-bit FAT" ;
|
||
|
71: case 18 :
|
||
|
72: return "Configuration/diagnostics partition" ;
|
||
|
73: case 20 :
|
||
|
74: return "Hidden DOS 16-bit FAT <32M" ;
|
||
|
75: case 22 :
|
||
|
76: return "Hidden DOS 16-bit FAT >=32M" ;
|
||
|
77: case 23 :
|
||
|
78: return "Hidden IFS (e.g., HPFS)" ;
|
||
|
79: case 24 :
|
||
|
80: return "AST SmartSleep Partition" ;
|
||
|
81: case 25 :
|
||
|
82: return "Unused" ;
|
||
|
83: case 27 :
|
||
|
84: return "Hidden WIN95 OSR2 FAT32" ;
|
||
|
85: case 28 :
|
||
|
86: return "Hidden WIN95 OSR2 FAT32, LBA-mapped" ;
|
||
|
87: case 30 :
|
||
|
88: return "Hidden WIN95 16-bit FAT, LBA-mapped" ;
|
||
|
89: case 32 :
|
||
|
90: return "Unused" ;
|
||
|
91: case 33 :
|
||
|
92: return "Reserved, Unused" ;
|
||
|
93: case 34 :
|
||
|
94: return "Unused" ;
|
||
|
95: case 35 :
|
||
|
96: return "Reserved" ;
|
||
|
97: case 36 :
|
||
|
98: return "NEC DOS 3.x" ;
|
||
|
99: case 38 :
|
||
|
100: return "Reserved" ;
|
||
|
101: case 39 :
|
||
|
102: return "PQservice, Windows RE hidden partition, MirOS partition, RouterBOOT kernel partition" ;
|
||
|
103: case 42 :
|
||
|
104: return "AtheOS File System (AFS)" ;
|
||
|
105: case 49 :
|
||
|
106: return "Reserved" ;
|
||
|
107: case 50 :
|
||
|
108: return "NOS" ;
|
||
|
109: case 51 :
|
||
|
110: return "Reserved" ;
|
||
|
111: case 52 :
|
||
|
112: return "Reserved" ;
|
||
|
113: case 53 :
|
||
|
114: return "JFS on OS/2 or eCS " ;
|
||
|
115: case 54 :
|
||
|
116: return "Reserved" ;
|
||
|
117: case 56 :
|
||
|
118: return "THEOS ver 3.2 2gb partition" ;
|
||
|
119: case 57 :
|
||
|
120: return "Plan 9 partition, THEOS ver 4 spanned partition" ;
|
||
|
121: case 58 :
|
||
|
122: return "THEOS ver 4 4gb partition" ;
|
||
|
123: case 59 :
|
||
|
124: return "THEOS ver 4 extended partition" ;
|
||
|
125: case 60 :
|
||
|
126: return "PartitionMagic recovery partition" ;
|
||
|
127: case 61 :
|
||
|
128: return "Hidden NetWare" ;
|
||
|
129: case 64 :
|
||
|
130: return "Venix 80286, PICK" ;
|
||
|
131: case 65 :
|
||
|
132: return "Linux/MINIX (sharing disk with DRDOS), Personal RISC Boot, PPC PReP (Power PC Reference Platform) Boot" ;
|
||
|
133: case 66 :
|
||
|
134: return "Linux swap (sharing disk with DRDOS), SFS (Secure Filesystem), Windows 2000 dynamic extended partition marker" ;
|
||
|
135: case 67 :
|
||
|
136: return "Linux native (sharing disk with DRDOS)" ;
|
||
|
137: case 68 :
|
||
|
138: return "GoBack partition" ;
|
||
|
139: case 69 :
|
||
|
140: return "Boot-US boot manager, Priam, EUMEL/Elan " ;
|
||
|
141: case 70 :
|
||
|
142: return "EUMEL/Elan " ;
|
||
|
143: case 71 :
|
||
|
144: return "EUMEL/Elan " ;
|
||
|
145: case 72 :
|
||
|
146: return "EUMEL/Elan " ;
|
||
|
147: case 74 :
|
||
|
148: return "Mark Aitchison's ALFS/THIN lightweight filesystem for DOS, AdaOS Aquila (Withdrawn)" ;
|
||
|
149: case 76 :
|
||
|
150: return "Oberon partition" ;
|
||
|
151: case 77 :
|
||
|
152: return "QNX4.x" ;
|
||
|
153: case 78 :
|
||
|
154: return "QNX4.x 2nd part" ;
|
||
|
155: case 79 :
|
||
|
156: return "QNX4.x 3rd part, Oberon partition" ;
|
||
|
157: case 80 :
|
||
|
158: return "OnTrack Disk Manager (older versions) RO, Lynx RTOS, Native Oberon (alt)" ;
|
||
|
159: case 81 :
|
||
|
160: return "OnTrack Disk Manager RW (DM6 Aux1), Novell" ;
|
||
|
161: case 82 :
|
||
|
162: return "CP/M, Microport SysV/AT" ;
|
||
|
163: case 83 :
|
||
|
164: return "Disk Manager 6.0 Aux3" ;
|
||
|
165: case 84 :
|
||
|
166: return "Disk Manager 6.0 Dynamic Drive Overlay (DDO)" ;
|
||
|
167: case 85 :
|
||
|
168: return "EZ-Drive" ;
|
||
|
169: case 86 :
|
||
|
170: return "Golden Bow VFeature Partitioned Volume., DM converted to EZ-BIOS" ;
|
||
|
171: case 87 :
|
||
|
172: return "DrivePro, VNDI Partition" ;
|
||
|
173: case 92 :
|
||
|
174: return "Priam EDisk" ;
|
||
|
175: case 97 :
|
||
|
176: return "SpeedStor" ;
|
||
|
177: case 99 :
|
||
|
178: return "Unix System V (SCO, ISC Unix, UnixWare, ...), Mach, GNU Hurd" ;
|
||
|
179: case 100 :
|
||
|
180: return "PC-ARMOUR protected partition, Novell Netware 286, 2.xx" ;
|
||
|
181: case 101 :
|
||
|
182: return "Novell Netware 386, 3.xx or 4.xx" ;
|
||
|
183: case 102 :
|
||
|
184: return "Novell Netware SMS Partition" ;
|
||
|
185: case 103 :
|
||
|
186: return "Novell" ;
|
||
|
187: case 104 :
|
||
|
188: return "Novell" ;
|
||
|
189: case 105 :
|
||
|
190: return "Novell Netware 5+, Novell Netware NSS Partition" ;
|
||
|
191: case 110 :
|
||
|
192: return "??" ;
|
||
|
193: case 112 :
|
||
|
194: return "DiskSecure Multi-Boot" ;
|
||
|
195: case 113 :
|
||
|
196: return "Reserved" ;
|
||
|
197: case 114 :
|
||
|
198: return "V7/x86" ;
|
||
|
199: case 115 :
|
||
|
200: return "Reserved" ;
|
||
|
201: case 116 :
|
||
|
202: return "Reserved, Scramdisk partition" ;
|
||
|
203: case 117 :
|
||
|
204: return "IBM PC/IX" ;
|
||
|
205: case 118 :
|
||
|
206: return "Reserved" ;
|
||
|
207: case 119 :
|
||
|
208: return "M2FS/M2CS partition, VNDI Partition" ;
|
||
|
209: case 120 :
|
||
|
210: return "XOSL FS" ;
|
||
|
211: case 126 :
|
||
|
212: return "Unused" ;
|
||
|
213: case 127 :
|
||
|
214: return "Unused" ;
|
||
|
215: case 128 :
|
||
|
216: return "MINIX until 1.4a" ;
|
||
|
217: case 129 :
|
||
|
218: return "MINIX since 1.4b, early Linux, Mitac disk manager" ;
|
||
|
219: case 130 :
|
||
|
220: return "Prime, Solaris x86, Linux swap" ;
|
||
|
221: case 131 :
|
||
|
222: return "Linux native partition" ;
|
||
|
223: case 132 :
|
||
|
224: return "OS/2 hidden C: drive, Hibernation partition" ;
|
||
|
225: case 133 :
|
||
|
226: return "Linux extended partition" ;
|
||
|
227: case 134 :
|
||
|
228: return "Old Linux RAID partition superblock, FAT16 volume set" ;
|
||
|
229: case 135 :
|
||
|
230: return "NTFS volume set" ;
|
||
|
231: case 136 :
|
||
|
232: return "Linux plaintext partition table" ;
|
||
|
233: case 138 :
|
||
|
234: return "Linux Kernel Partition (used by AiR-BOOT)" ;
|
||
|
235: case 139 :
|
||
|
236: return "Legacy Fault Tolerant FAT32 volume" ;
|
||
|
237: case 140 :
|
||
|
238: return "Legacy Fault Tolerant FAT32 volume using BIOS extd INT 13h" ;
|
||
|
239: case 141 :
|
||
|
240: return "Free FDISK 0.96+ hidden Primary DOS FAT12 partitition" ;
|
||
|
241: case 142 :
|
||
|
242: return "Linux Logical Volume Manager partition" ;
|
||
|
243: case 144 :
|
||
|
244: return "Free FDISK 0.96+ hidden Primary DOS FAT16 partitition" ;
|
||
|
245: case 145 :
|
||
|
246: return "Free FDISK 0.96+ hidden DOS extended partitition" ;
|
||
|
247: case 146 :
|
||
|
248: return "Free FDISK 0.96+ hidden Primary DOS large FAT16 partitition" ;
|
||
|
249: case 147 :
|
||
|
250: return "Hidden Linux native partition, Amoeba" ;
|
||
|
251: case 148 :
|
||
|
252: return "Amoeba bad block table" ;
|
||
|
253: case 149 :
|
||
|
254: return "MIT EXOPC native partitions" ;
|
||
|
255: case 150 :
|
||
|
256: return "CHRP ISO-9660 filesystem" ;
|
||
|
257: case 151 :
|
||
|
258: return "Free FDISK 0.96+ hidden Primary DOS FAT32 partitition" ;
|
||
|
259: case 152 :
|
||
|
260: return "Free FDISK 0.96+ hidden Primary DOS FAT32 partitition (LBA), Datalight ROM-DOS Super-Boot Partition" ;
|
||
|
261: case 153 :
|
||
|
262: return "DCE376 logical drive" ;
|
||
|
263: case 154 :
|
||
|
264: return "Free FDISK 0.96+ hidden Primary DOS FAT16 partitition (LBA)" ;
|
||
|
265: case 155 :
|
||
|
266: return "Free FDISK 0.96+ hidden DOS extended partitition (LBA)" ;
|
||
|
267: case 158 :
|
||
|
268: return "ForthOS partition" ;
|
||
|
269: case 159 :
|
||
|
270: return "BSD/OS" ;
|
||
|
271: case 160 :
|
||
|
272: return "Laptop hibernation partition" ;
|
||
|
273: case 161 :
|
||
|
274: return "Laptop hibernation partition, HP Volume Expansion (SpeedStor variant)" ;
|
||
|
275: case 163 :
|
||
|
276: return "HP Volume Expansion (SpeedStor variant)" ;
|
||
|
277: case 164 :
|
||
|
278: return "HP Volume Expansion (SpeedStor variant)" ;
|
||
|
279: case 165 :
|
||
|
280: return "BSD/386, 386BSD, NetBSD, FreeBSD" ;
|
||
|
281: case 166 :
|
||
|
282: return "OpenBSD, HP Volume Expansion (SpeedStor variant)" ;
|
||
|
283: case 167 :
|
||
|
284: return "NeXTStep" ;
|
||
|
285: case 168 :
|
||
|
286: return "Mac OS-X" ;
|
||
|
287: case 169 :
|
||
|
288: return "NetBSD" ;
|
||
|
289: case 170 :
|
||
|
290: return "Olivetti Fat 12 1.44MB Service Partition" ;
|
||
|
291: case 171 :
|
||
|
292: return "Mac OS-X Boot partition, GO! partition" ;
|
||
|
293: case 173 :
|
||
|
294: return "RISC OS ADFS" ;
|
||
|
295: case 174 :
|
||
|
296: return "ShagOS filesystem" ;
|
||
|
297: case 175 :
|
||
|
298: return "ShagOS swap partition, MacOS X HFS" ;
|
||
|
299: case 176 :
|
||
|
300: return "BootStar Dummy" ;
|
||
|
301: case 177 :
|
||
|
302: return "HP Volume Expansion (SpeedStor variant), QNX Neutrino Power-Safe filesystem" ;
|
||
|
303: case 178 :
|
||
|
304: return "QNX Neutrino Power-Safe filesystem" ;
|
||
|
305: case 179 :
|
||
|
306: return "HP Volume Expansion (SpeedStor variant), QNX Neutrino Power-Safe filesystem" ;
|
||
|
307: case 180 :
|
||
|
308: return "HP Volume Expansion (SpeedStor variant)" ;
|
||
|
309: case 182 :
|
||
|
310: return "HP Volume Expansion (SpeedStor variant), Corrupted Windows NT mirror set (master), FAT16 file system" ;
|
||
|
311: case 183 :
|
||
|
312: return "Corrupted Windows NT mirror set (master), NTFS file system, BSDI BSD/386 filesystem" ;
|
||
|
313: case 184 :
|
||
|
314: return "BSDI BSD/386 swap partition" ;
|
||
|
315: case 187 :
|
||
|
316: return "Boot Wizard hidden" ;
|
||
|
317: case 188 :
|
||
|
318: return "Acronis backup partition" ;
|
||
|
319: case 189 :
|
||
|
320: return "BonnyDOS/286" ;
|
||
|
321: case 190 :
|
||
|
322: return "Solaris 8 boot partition" ;
|
||
|
323: case 191 :
|
||
|
324: return "New Solaris x86 partition" ;
|
||
|
325: case 192 :
|
||
|
326: return "CTOS, REAL/32 secure small partition, NTFT Partition, DR-DOS/Novell DOS secured partition" ;
|
||
|
327: case 193 :
|
||
|
328: return "DRDOS/secured (FAT-12)" ;
|
||
|
329: case 194 :
|
||
|
330: return "Unused, Hidden Linux" ;
|
||
|
331: case 195 :
|
||
|
332: return "Hidden Linux swap" ;
|
||
|
333: case 196 :
|
||
|
334: return "DRDOS/secured (FAT-16, < 32M)" ;
|
||
|
335: case 197 :
|
||
|
336: return "DRDOS/secured (extended)" ;
|
||
|
337: case 198 :
|
||
|
338: return "DRDOS/secured (FAT-16, >= 32M), Windows NT corrupted FAT16 volume/stripe set" ;
|
||
|
339: case 199 :
|
||
|
340: return "Windows NT corrupted NTFS volume/stripe set, Syrinx boot" ;
|
||
|
341: case 200 :
|
||
|
342: return "Reserved for DR-DOS 8.0+" ;
|
||
|
343: case 201 :
|
||
|
344: return "Reserved for DR-DOS 8.0+" ;
|
||
|
345: case 202 :
|
||
|
346: return "Reserved for DR-DOS 8.0+" ;
|
||
|
347: case 203 :
|
||
|
348: return "DR-DOS 7.04+ secured FAT32 (CHS)/" ;
|
||
|
349: case 204 :
|
||
|
350: return "DR-DOS 7.04+ secured FAT32 (LBA)/" ;
|
||
|
351: case 205 :
|
||
|
352: return "CTOS Memdump? " ;
|
||
|
353: case 206 :
|
||
|
354: return "DR-DOS 7.04+ FAT16X (LBA)/" ;
|
||
|
355: case 207 :
|
||
|
356: return "DR-DOS 7.04+ secured EXT DOS (LBA)/" ;
|
||
|
357: case 208 :
|
||
|
358: return "REAL/32 secure big partition, Multiuser DOS secured partition" ;
|
||
|
359: case 209 :
|
||
|
360: return "Old Multiuser DOS secured FAT12" ;
|
||
|
361: case 212 :
|
||
|
362: return "Old Multiuser DOS secured FAT16 <32M" ;
|
||
|
363: case 213 :
|
||
|
364: return "Old Multiuser DOS secured extended partition" ;
|
||
|
365: case 214 :
|
||
|
366: return "Old Multiuser DOS secured FAT16 >=32M" ;
|
||
|
367: case 216 :
|
||
|
368: return "CP/M-86" ;
|
||
|
369: case 218 :
|
||
|
370: return "Non-FS Data, Powercopy Backup" ;
|
||
|
371: case 219 :
|
||
|
372: return "Digital Research CP/M, Concurrent CP/M, Concurrent DOS, CTOS (Convergent Technologies OS -Unisys), KDG Telemetry SCPU boot" ;
|
||
|
373: case 221 :
|
||
|
374: return "Hidden CTOS Memdump? " ;
|
||
|
375: case 222 :
|
||
|
376: return "Dell PowerEdge Server utilities (FAT fs)" ;
|
||
|
377: case 223 :
|
||
|
378: return "DG/UX virtual disk manager partition, BootIt EMBRM" ;
|
||
|
379: case 225 :
|
||
|
380: return "DOS access or SpeedStor 12-bit FAT extended partition" ;
|
||
|
381: case 227 :
|
||
|
382: return "DOS R/O or SpeedStor" ;
|
||
|
383: case 228 :
|
||
|
384: return "SpeedStor 16-bit FAT extended partition < 1024 cyl." ;
|
||
|
385: case 230 :
|
||
|
386: return "Storage Dimensions SpeedStor" ;
|
||
|
387: case 232 :
|
||
|
388: return "LUKS" ;
|
||
|
389: case 234 :
|
||
|
390: return "Rufus extra partition, Freedesktop boot" ;
|
||
|
391: case 235 :
|
||
|
392: return "BeOS BFS" ;
|
||
|
393: case 236 :
|
||
|
394: return "SkyOS SkyFS" ;
|
||
|
395: case 237 :
|
||
|
396: return "Unused" ;
|
||
|
397: case 238 :
|
||
|
398: return "Indication that this legacy MBR is followed by an EFI header" ;
|
||
|
399: case 239 :
|
||
|
400: return "Partition that contains an EFI file system" ;
|
||
|
401: case 240 :
|
||
|
402: return "Linux/PA-RISC boot loader" ;
|
||
|
403: case 241 :
|
||
|
404: return "Storage Dimensions SpeedStor" ;
|
||
|
405: case 242 :
|
||
|
406: return "DOS 3.3+ secondary partition" ;
|
||
|
407: case 243 :
|
||
|
408: return "Reserved" ;
|
||
|
409: case 244 :
|
||
|
410: return "SpeedStor large partition, Prologue single-volume partition" ;
|
||
|
411: case 245 :
|
||
|
412: return "Prologue multi-volume partition" ;
|
||
|
413: case 246 :
|
||
|
414: return "Storage Dimensions SpeedStor" ;
|
||
|
415: case 247 :
|
||
|
416: return "DDRdrive Solid State File System" ;
|
||
|
417: case 249 :
|
||
|
418: return "pCache" ;
|
||
|
419: case 250 :
|
||
|
420: return "Bochs" ;
|
||
|
421: case 251 :
|
||
|
422: return "VMware File System partition" ;
|
||
|
423: case 252 :
|
||
|
424: return "VMware Swap partition" ;
|
||
|
425: case 253 :
|
||
|
426: return "Linux raid partition with autodetect using persistent superblock" ;
|
||
|
427: case 254 :
|
||
|
428: return "SpeedStor > 1024 cyl., LANstep, Windows NT Disk Administrator hidden partition, Linux Logical Volume Manager partition (old)" ;
|
||
|
429: case 255 :
|
||
|
430: return "Xenix Bad Block Table" ;
|
||
|
431: default :
|
||
|
432: return "Unknown partition type" ;
|
||
|
433: }
|
||
|
434: }
|
||
|
435:
|
||
|
436:
|
||
|
437: typedef struct fdisk_partition {
|
||
|
438: unsigned char bootid < comment = BootID > ;
|
||
|
439: unsigned short beghead : 8 ;
|
||
|
440: unsigned short begsect : 6 ;
|
||
|
441: unsigned short begcyl : 10 ;
|
||
|
442: unsigned char systid < comment = PartitionID > ;
|
||
|
443: unsigned short endhead : 8 ;
|
||
|
444: unsigned short endsect : 6 ;
|
||
|
445: unsigned short endcyl : 10 ;
|
||
|
446: unsigned int relsect ;
|
||
|
447: unsigned int numsect ;
|
||
|
448: } ;
|
||
|
449:
|
||
|
450:
|
||
|
451: typedef struct master_boot_record {
|
||
|
452: char bootinst [ 446 ] ;
|
||
|
453: fdisk_partition partitions [ 4 ] ;
|
||
|
454: ushort signature ;
|
||
|
455: } ;
|
||
|
456:
|
||
|
457: LittleEndian ( ) ;
|
||
|
458:
|
||
|
459: FSeek ( 0 ) ;
|
||
|
460: master_boot_record MBR ;
|
||
|
461: tok_eof
|