Написал загрузчик для FAT*

Тема в разделе "WASM.ASSEMBLER", создана пользователем Mika0x65, 20 окт 2006.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Мое почтение всем.

    Написал загрузчик для FAT* (FASM). Возможно, он пригодится ОСписателям и тем, кто хочет поработать с процессором без эмулятора.

    Загрузчик ищет файл корневой директории и найдя, передает ему управление. Имя файла, адрес загрузки и точки входа можно менять. Макс. размер загружаемого файла -- 64К.

    Вообще, хотелось написать простой, понятный и маленький загрузчик. Насколько простой и понятный получился -- не знаю, а вот с "маленький" ничего не вышло -- FAT12/32 занимет весь бут-сектор. Если у кого есть идеи как уменьшить его размер (байт на 11 хотя бы), но не меняя общей структуры -- отзовитесь, пожалуйста. Хочу добавить перемещение самого себя на адрес, отличный от 0x7C00, но нет места :dntknw:. Сообщите также, в случае, если обнаружите баг.

    Немного наблюдений:

    1. Драйвер для FAT от MS, судя по всему, не трогает сектора, находщиеся в последнем кластере, но "за пределами" размера файла. Т.е. если файл занимает 15 байт, размер сектора 512 байт, кластера -- 8 секторов, то все изменения в файле, затронут только первый сектор. В случае, конечно, если размер не возрастет. Остальные 7 секторов драйвер даже не удосуживается обнулить.

    2. Есть совсем простой (но не надежный!) способ спрятать файлы от пользователя без хуков и т.д. Достаточно вместо сигнатуры 0xE5 удаленной записи файла в директории поставить 0x0 -- тогда все файлы, чьи записи идут после не будут отображены. Правда, chkdsk это быстро разоблачает, и, считая это ошибкой, восстанавливает файлы в .CHK

    3. Не совсем ясно, когда драйвер освобождает кластеры, принадлежащие директориям, в которых все записи удалены. Интереса ради я создал 65535 пустых файлов, потом удалил. Драйвер даже в ус не подул.

    4. Драйвер FAT от BSD заполняет не подряд идущие кластеры, а пользуется каким-то своим, то ли хитрым, то ли глупым алгоритмом (я особо с этим не разбирался) -- удобно для тестирования, но фрагментация от этого, думаю, будет жуткая. Он же преподнес мне неприятный сюрприз, считая что 2 байта перед сигнатурой 0xAA55 тоже являются сигнатурами и должны быть обнулены.

    Надеюсь, загрузчик будет кому-нибудь полезным :).
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384