Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с FAT 16/32

4.4K
10 марта 2007 года
erzik
47 / / 08.04.2006
Собираюсь подключать к бутсектору работу с системой FAT 16 (для чтения с дискеты файлов для загрузки всякого мусора).
Прочитал спецификацию файловой системы http://wasm.ru/doclist.php?list=11.
Решил посмотреть, что куда пишется на практике: отформатировал дискету, кинул один txt файл, наваял программку для чтения нужного сектора.
- сектор 1, сторона 0, цилиндр 0:
тут все, как написано в спецификации...
- сектор 2,3,4,5 , сторона 0, цилиндр 0:
пусто...

Вопрос: а где можно найти корневую директорию (сектор/сторона :)/цилиндр )?
т.к. хочется посмотреть, как записан файл в директории и все такое... а то с одной теории писать программу для работы с FAT тяжело будет...

ЗЫ сегодня посмотрел дискету через DiskEdit. Файл есть :) и он в 19 секторе, но как это определить(точнее, где посмотреть) - не знаю (
334
10 марта 2007 года
HexEdit
809 / / 27.07.2006
Во-первых: Дискета имеет файловую систему не FAT16, а FAT12.
Во-вторых: В FAT корневой каталог идет сразу за самой таблицей.
Тоесть если у тебя резервированных секторов 1 (только загрузочный) и sizeof(FAT) = 9 секторов, то корневой каталог начнется в 11 секторе C0/H0/S11
4.4K
10 марта 2007 года
erzik
47 / / 08.04.2006
извиняюсь, конечно fat12...
Цитата:
Тоесть если у тебя резервированных секторов 1 (только загрузочный) и sizeof(FAT) = 9 секторов, то корневой каталог начнется в 11 секторе C0/H0/S11



посмотрел... пусто... только в самом начале F0FF FFFF

код проги, которой смотрел:


Код:
org 100h

mov ah,02h
mov al,1    ;сколько секторов читать
mov ch,0
mov cl,0bh  ;какой сектор читать
mov dh,0
mov dl,00h
mov bx,buffer
int 13h

mov ah,3dh
mov al,2
mov dx,name
int 21h
mov [handle],ax

mov ah,40h
mov bx,[handle]
mov cx,512
mov dx,buffer
int 21h

mov ah,3eh
mov bx,[handle]
int 21h
int 20h

name db 'sector.txt',0
handle dw 0
buffer:
times 512 db 0
1.9K
10 марта 2007 года
disasm
232 / / 06.02.2006
В дисковых системах есть такое понятие как LBA, с помощью которого каждому сектору сопоставляется одно число - его номер, начинается с нуля. Зная LBA можно посчитать номера CHS

Корневой каталог размещается не там, т.к. обычно есть 2 копии FAT-а
Т.е. 1+9+9=19
Смотреть 19-й сектор (опять-таки с нуля начиная).
Кроме того есть прога WinHex, которая сама высчитывает смещения каталогов, фатов и прочего (в том числе файлов и кластеров)
Ей можно смотреть содержимое диска, редактировать, сохранять в файл, ...
Серийник к ней спрашивать в ICQ 237-713-103
334
10 марта 2007 года
HexEdit
809 / / 27.07.2006
Ну во-первых пользуйся bb-кодом [CОDE]

По теме:
Для начала узнай сколько зарезервированных секторов, и какой размер таблицы.

А еще забыл сказать, про кол-во таблиц. По умолчанию их 2. Тоесть в данном случае, сектор с началом корневого каталога будет 20й.

Считываешь 1 сектор, размер таблицы находиться по смещению 016h (значение в секторах), кол-во таблиц - 010h, зарезервированных секторов - 0Eh
4.4K
10 марта 2007 года
erzik
47 / / 08.04.2006
disasm, HexEdit, спасибо вам большое :)

корневой каталог был найден Hex Workshop'ом в 19 секторе, а текстовый файл (его содержимое) в 33 секторе, как и написано в каталоге :)

теперь проблема номер 2: какой сектор/цилиндр нужно считать, чтобы это было равносильно 33 сектору? (2 цилиндр 1 сектор не подошел)
Сейчас начал разбираться, как преобразоввывать LBA в CHS, но думаю, вы мне ответите быстрее, чем я разберусь :)
349
10 марта 2007 года
Phantom-84
656 / / 27.10.2005
Цитата:
Прочитал спецификацию файловой системы...

Вопрос: а где можно найти корневую директорию (сектор/сторона /цилиндр )?
т.к. хочется посмотреть, как записан файл в директории и все такое... а то с одной теории писать программу для работы с FAT тяжело будет...

ЗЫ сегодня посмотрел дискету через DiskEdit. Файл есть и он в 19 секторе, но как это определить(точнее, где посмотреть) - не знаю (

Хреново ты однако читал спецификацию...

Цитата:
Во-вторых: В FAT корневой каталог идет сразу за самой таблицей.
Тоесть если у тебя резервированных секторов 1 (только загрузочный) и sizeof(FAT) = 9 секторов, то корневой каталог начнется в 11 секторе C0/H0/S11

HexEdit, а как же вторая копия FAT, которая практически всегда присутствует на дискете? Да и потом дискеты с разметкой 18/80/2 - это не единственно возможный вариант, на других типах дискет корневой каталог может находиться в другом месте (не в секторах 19-32 при нумерации с нуля)... Вся эта информация должна находиться в бутсекторе отформатированной дискеты! С FAT32 немного другая история...

334
11 марта 2007 года
HexEdit
809 / / 27.07.2006
2Phantom-84
Да уже исправился... и написал... см.выше
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог