Собираюсь подключать к бутсектору работу с системой FAT 16 (для чтения с дискеты файлов для загрузки всякого мусора). Прочитал спецификацию файловой системы http://wasm.ru/doclist.php?list=11. Решил посмотреть, что куда пишется на практике: отформатировал дискету, кинул один txt файл, наваял программку для чтения нужного сектора. - сектор 1, сторона 0, цилиндр 0: тут все, как написано в спецификации... - сектор 2,3,4,5 , сторона 0, цилиндр 0: пусто... Вопрос: а где можно найти корневую директорию (сектор/сторона /цилиндр )? т.к. хочется посмотреть, как записан файл в директории и все такое... а то с одной теории писать программу для работы с FAT тяжело будет...
Я извиняюсь, возможно отвечаю не по теме, но посмотри статью "Бут-вирус под вин98. Старые звери в новом лесу" в разделе "вирусология" на этом сайте. Возможно там найдешь пример. Сам я эту статью не смотрел, т.к. я в этой тебе как хрюшка в кибернетике
Прочитал, про фат что-то ничего не нашел... жаль... Спасибо, пригодилось ) Файл находится в 19 секторе, но как это определить (где посмотреть) - остается загадкой (
RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec – 1)) / BPB_BytsPerSec; Из доки от M$. Я писал код по этой доке, и вроде всё нормально работает
Нашел это в доках. Считаю: 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 Объясните чайнику, что не так !?
Программа, которой смотрю содержимое сектора: Код (Text): org 100h mov ah,02h mov al,1 ;сколько секторов читать mov ch,2 mov cl,1h ;какой сектор читать 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. Сектора номер 0 не существует. Так что в твоем примере если лог.сектор 28 - то смотреть надо физ.сектор номер 12 а не 11.