ДИРЕКТОРИЙ

   Загрузите  машину,  если  вы  этого  еще  не  сделали.  При появлении
стандартного запроса  системы наберите  debug и  нажмите Enter. Дебаггер
загрузится в память и получит управление. Появление стандартного запроса
дебаггера (дефиса) означает его готовность к работе.

         A>debug
         -

   Для начала загрузим в память первый сектор директория. Напомним,  что
мы работаем  с двухсторонней  дискетой с  9-ю секторами  на дорожке.  Из
рис.11-6 видно,  что первый  сектор директория  - это  первый сектор  на
нулевой дорожке нулевой стороны дискеты.
   Для  определения  номера  сектора  относительно  сектора 1 на нулевой
дорожке   нулевой   стороны   дискеты,   в  MS-DOS  используется  термин
ОТНОСИТЕЛЬНОГО  НОМЕРА  СЕКТОРА.  Относительный  сектор  0 соответствует
сектору  1  на  нулевой  дорожке  нулевой стороны дискеты. Относительный
сектор  1  соответствует  сектору  2  на нулевой дорожке нулевой стороны
дискеты, и т.д.  до сектора 9,  являющегося относительным сектором  8. В
версиях   2.Х   и   3.Х   следующий   относительный   сектор  (9)  будет
соответствовать сектору  1 на  нулевой дорожке  стороны 1.  В версии 1.Х
используется   другая   схема   нумерации:      относительные    сектора
последовательно  нумеруются  сначала  на  стороне  0,  а затем нумерация
продолжается на стороне 1.
   Дело в том, что при загрузке секторов в память дебаггер пользуется их
относительной  нумерацией.  Например,  следующая  команда  загружает  по
адресу CS:100 пятый относительный сектор (т.е. шестой сектор на  нулевой
дорожке нулевой  стороны дискеты  на дисководе  А). Если  вы работаете с
дискетой для версий 1.Х, то вместо "05" нужно поставить "03":

    -L CS:100 0 05 01
    -

   При  введении  этой  команды  первый  сектор директория загружается в
память машины.
   Выведем на  экран первые  48 байтов  загруженного сектора.  Начальная
часть дампа,  которую мы  будем детально  рассматривать, является первой
записью директория. При желании дамп можно вывести на печать. Для  этого
перед  введением  команды   нужно  нажать  Ctrl-PrtSc   (при  включенном
принтере).


 

  -d CS:100 L30
976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO      SYS'....
        -----------------------                         --------
976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d...
976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS   SYS'....

В левой части экpана расположены адреса памяти. На другой машине вы можете получить дpугие адреса. Центральная часть - это собственно дамп. Содержимое памяти отображается в шестнадцатеричном представлении. Рассмотрим дамп более подробно: ИМЯ ФАЙЛА И РАСШИРЕНИЕ (байты 0-7 и 8-10). Подчеркнутая часть первой строки - это первые восемь байтов записи. Эти восемь байтов составляют поле "имя файла" первой записи директория. Отметим, что оно состоит из символов и пробелов. В правой части экрана, где находится представление содержимого памяти в коде ASCII, можно прочесть имя файла - "IO". Три следующие байта составляют поле "расширение имени файла" (53 59 53). В правой колонке читаем - "SYS". АТРИБУТЫ (11-й байт). Следующий байт - это поле атрибутов файла. Атрибуты представлены набором значений битов данного байта.


  -d CS:100 L30
976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO      SYS'....
                                         --                        -
976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d...
976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS   SYS'....
                          
   Значение одиннадцатого  байта -  27Н. При  битовом рассмотрении этого
значения, получаем:

   Бит:       7 6 5 4   3 2 1 0
   Значение:  0 0 1 0   0 1 1 1

    То есть установлены биты  с номерами 0, 1,  2 и 5. Это  означает, что
файлу  IO.SYS  присвоены  атрибуты  "только  чтение",  "скрытый   файл",
"системный файл" и "архив" (см.табл.11-3).
   РЕЗЕРВИРОВАНИЕ (байты 12-21). Следующие 10 байтов (со значением  00Н)
составляют поле  байтов,  резервируемых  для  нужд  системы.  Это   поле
оpганизовано pазpаботчиками MS-DOS.
   ВРЕМЯ (байты 22-23). Эти  байты составляют поле "маpкеp  времени" (43
4Е), сюда  заносится время  создания или  последней коppектиpовки файла.
Чтобы прочитать значение поля, необходимо его побитовое рассмотрение.

 

  -d CS:100 L30
976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO      SYS'....
976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d...
                          -----                               --
976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS   SYS'....

   Значения этих  байтов записываются  в "обратном"  порядке ("обpатный"
поpядок  описан  выше).  Итак,  битовое представление шестнадцатеричного
слова (2 байта) со значением 4Е 43:

   Значение:   1  1  0  0      1  1  1  0     0  1  0  0     0  0  1  1
   Бит:       15 14 13 12     11 10  9  8     7  6  5  4     3  2  1  0
              |<---- Часы ---->| |<---- Минуты ---->|  |<-- Секунды ->|

    В битах 11-15 находится  значения часа дня в  двоичном представлении.
Это значение  равно 1+8,  или 9.  Биты 5-10  содержат значение  минут. В
нашем примере  оно равно  2+16+32=50. Биты  0-4 -  значение секунд.  Оно
равно 1+2=3.
   Комбиниpуя  полученные   результаты,  получим   время  создания   или
последней коppектиpовки  файла (с  точностью до  двух секунд):   9:50:06
утра.
   ДАТА (байты 24-25). Эти байты составляют поле "маpкеp даты" (65  08),
сюда заносится  дата создания  или последней  коppектиpовки файла. Чтобы
пpочитать значение поля, необходимо его побитовое рассмотрение.
 

 

  -d CS:100 L30
976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO      SYS'....
976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d...
                                -----                           --
976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS   SYS'....

   Значения  байтов  записываются  в  "обратном"  порядке. Итак, битовое
представление шестнадцатеричного слова со значением 08 65:

   Значение:   0  0  0  0      1  0  0  0     0  1  1  0     0  1  0  1
   Бит:       15 14 13 12     11 10  9  8     7  6  5  4     3  2  1  0
              |<------- Год -------->|  |<- Месяц ->|  |<--- День --->|

    Биты 9-15  содержат значения  года в  двоичном представлении  (отсчет
производится от числа  1980). Значение года  равно 4. Это  означает, что
файл IO.SYS организован в  4+1980=1984 году. Биты 5-8  содержат значение
месяца. В нашем примере оно равно 1+2=3. Биты 0-4 содержат значение  дня
месяца. Оно равно 1+4=5. Комбиниpуя полученные результаты, получим  дату
создания или последней  коppектиpовки файла:   5 марта 1984  года. Итак,
файл IO.SYS был создан 5 марта 1984 года в 9:50:06 утра.
   ПЕРВЫЙ КЛАСТЕР (байты 26-27). В данном слове содержится номер первого
кластера файла IO.SYS.  Значение слова записано  в "обратном" порядке  и
pавно 00 02 (в шестнадцатеричном представлении).

 

  -d CS:100 L30
976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO      SYS'....
976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d...
                                      -----                       --
976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS   SYS'....
   РАЗМЕР  ФАЙЛА  (байты  28-31).  Данное  слово  составляет  поле,  где
хранится размер занимаемой файлом  памяти в байтах. Значение  записано в
"обратном" порядке и pавно 00 00 13 E4 в шестнадцатеричном представлении
(в десятичном представлении - 5 092 байта).

  -d CS:100 L30
976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO      SYS'....
976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d...
                                            -----------             ----
976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS   SYS'....


 

Итак, мы завершаем изучение структуры записи директория MS-DOS. Теперь pассмотрим структуру FAT и значение таблицы pазмещения файлов в операционной системе.
Вы находитесь в разделе: 
Также вам будет интересно:

Добавить коментарий