работа с FAT 16/32

Тема в разделе "WASM.OS.DEVEL", создана пользователем erzik, 10 мар 2007.

  1. erzik

    erzik New Member

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

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

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Я извиняюсь, возможно отвечаю не по теме, но посмотри статью "Бут-вирус под вин98. Старые звери в новом лесу" в разделе "вирусология" на этом сайте. Возможно там найдешь пример. Сам я эту статью не смотрел, т.к. я в этой тебе как хрюшка в кибернетике
     
  3. Ra_

    Ra_ New Member

    Публикаций:
    0
    Регистрация:
    4 мар 2007
    Сообщения:
    289
  4. erzik

    erzik New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6
    Прочитал, про фат что-то ничего не нашел... жаль...
    Спасибо, пригодилось ) Файл находится в 19 секторе, но как это определить (где посмотреть) - остается загадкой (
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec – 1)) / BPB_BytsPerSec;
    Из доки от M$.
    Я писал код по этой доке, и вроде всё нормально работает :)
     
  6. erzik

    erzik New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6
    Нашел это в доках. :)

    Считаю: RootDirSectors = (0E0h*32+511)/512=9
    Смотрю сектор 9 цилиндр 0 - пусто - нули

    В доках: начало региона данных, первый сектор кластера 2...
    Смотрю сектор 1 цилиндр 2 - все заполнено 0F6h

    Дальше в доках вычисление этого начала:
    FirstDataSector=BPB_ResvdSecCnt+(BPB_NumFATs*FATSz)+RootDirSectors
    Считаю: FirstDataSector=1+2*9+9=28
    Смотрю сектор 0Bh цилиндр 1 - все заполнено 0F6h

    Объясните чайнику, что не так !?
     
  7. erzik

    erzik New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6
    Программа, которой смотрю содержимое сектора:
    Код (Text):
    1. org 100h
    2.  
    3. mov ah,02h
    4. mov al,1    ;сколько секторов читать
    5. mov ch,2
    6. mov cl,1h   ;какой сектор читать
    7. mov dh,0
    8. mov dl,00h
    9. mov bx,buffer
    10. int 13h
    11.  
    12. mov ah,3dh
    13. mov al,2
    14. mov dx,name
    15. int 21h
    16. mov [handle],ax
    17.  
    18. mov ah,40h
    19. mov bx,[handle]
    20. mov cx,512
    21. mov dx,buffer
    22. int 21h
    23.  
    24. mov ah,3eh
    25. mov bx,[handle]
    26. int 21h
    27. int 20h
    28.  
    29. name db 'sector.txt',0
    30. handle dw 0
    31. buffer:
    32. times 512 db 0
    Естественно, все пока под Виндой... когда разберусь, буду писать для реал/защищен режима
     
  8. Guest

    Guest Guest

    Публикаций:
    0
    http://web.archive.org/web/20031203013803/www.lowlevel.ru/articles/ - недавно ссылка проскакивала.
     
  9. Ra_

    Ra_ New Member

    Публикаций:
    0
    Регистрация:
    4 мар 2007
    Сообщения:
    289
  10. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Гы - логическая нумерация секторов в физическую правильно преобразована?

    Нумерация физических секторов всегда начинается с 1. Сектора номер 0 не существует. Так что в твоем примере если лог.сектор 28 - то смотреть надо физ.сектор номер 12 а не 11.