Четене на FAT32

Не толкова отдавна реших да разбера същността на файловата система FAT. За целта си поставих задачата да намеря и прочета файл на USB флаш устройство, използвайки само HxD и без Ctrl + F, разбира се.

Тази публикация ще покрие само повърхностно спецификацията FAT32. Интересно? Влез. И да, не забравяйте за големите ендийски ендианси и други малки неща, които правят живота ни забавен.

този случай

Първите 11 байта се отнасят за сектора за зареждане, три байта означават началото на сектора за зареждане на операционната система (ако той е там, разбира се), останалите осем са името на операционната система или производителя, в този случай това е MSDOS5. 0. Давам значението на останалите байтове по-долу:

Байтове - Цел
2 - Броят байтове в сектора, валидни стойности - 512, 1024, 2048 или 4096.
1 - Сектори на клъстер, тук има 8 от тях Може би 1,2,4,8,16,32,64 или 128.
2 - Брой запазени сектори. Обикновено 32, но това е различно. Не е страшно.
1 - Брой FAT таблици, обикновено две, в противен случай много програми ще полудеят. Но в името на икономията понякога остава само една таблица, когато не се изисква резервиране на FS (данните не се дублират).
4 - Използва се във FAT12/16, но за FAT32 ще има нули.
1 - Стандартната стойност за твърдите дискове е 0xF8, за сменяемите устройства - 0xF0. Също така, може да има стойности 0xF9, 0xFA ... 0xFF, основното е, че първият байт от таблицата FAT има същата стойност, в противен случай това е причина за безпокойство. Но това е само старо правило от MSDOS дни, което се използва за определяне на типа на диска.
2 - Не се използва във FAT32, 0x00.
2 - Брой сектори на песен.
2 - Брой глави.
4 - Брой скрити сектори, ако дискът е разделен на дялове, тук не трябва да има нула.
4 - Общ брой сектори на диска.
4 - Брой сектори на една FAT таблица.
2 - Поле за флаг, което не е покрито тук.
2 - Номер на версията на FAT32, в случая 00.
4 - Номерът на първия клъстер на главната директория, най-често два, но ако вторият клъстер е повреден, тогава дисковата програма може да промени номера.
2 - Секторен номер със странна структура на FSINFO, който няма да засегнем сега.
2 - Номерът на сектора в резервната зона на диска, или 6 или 0, други стойности водят до безпокойство и ненужна работа.
12 - Най-дълго и безполезно поле Запазено, нули по подразбиране.
1 - 0x00 за флопи и 0x80 за твърди дискове. Използва се за BIOS функция int 13h.