Я создал образ FAT с помощью:
[user@localhost]$ dd if=/dev/zero of=floppy.img bs=1024 count=2880
[user@localhost]$ mkdosf -F 12 floppy.img
Затем я монтирую образ и добавляю новый файл:
[user@localhost]$ echo "Hello, World!" >> /mnt/hello.txt
В Википедии обзор файловой системы, область данных находится по адресу: ReservedSectors + (NumerOfFATs * SectorsPerFAT) + ((NumberOfRootEntries * 32) / BytesPerSector)
Загрузочный сектор floppy.img выглядит следующим образом:
jmp : 0xeb 0x3c
nop : 0x90
OEM : mkfs.fat
Bytes per sectors : 512
Sectors per cluster : 2
Reserved sectors : 1
FAT copies : 2
Root directory entries : 224
Small sectors : 5760
Media type : 0xf0
Sectors per FAT : 9
Sectors per track
Heads : 2
Hidden sectors : 0
Large sectors : 0
Drive number : 0
Signature : 41
Serial number : 1845425665
Volume label : NO NAME
FS type : FS type : FAT12
Executable : 0xaa55
В таблице корневого каталога я ищу файл hello.txt и получаю ответ, что первый кластер находится по адресу 0x03:
entry 1: HELLO.TXT cluster : 0x03
Теперь я вычисляю предыдущую формулу и получаю следующее смещение в секторах:
1 + (2 * 9) + ((224 * 32) / 512) = 33
В байтах должно быть 33 * 512 = 16896. Это должно быть началом области данных. Чтобы найти данные файла hello.txt, я должен добавить смещение Cluster * SectorsPerCluster = 6.
Данные файла должны располагаться в 39 секторе или на 19968 байтах от начала. Но когда я просматриваю этот сектор с помощью hexdump, ничего не возвращается:
[user@localhost]$ hexdump -C -s 19968 floppy.img
00004e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
Читая hedump, я обнаружил, что hello.txt находится по смещению 17920 байт или в 35-м секторе от начала.
Что мне не хватает?