Файл: О.А.Калашников. Ассемблер Это Просто. Учимся программировать.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Программирование

Добавлен: 16.02.2019

Просмотров: 29193

Скачиваний: 1689

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

Часть III. Файловая оболочка, вирус, резидент 

304 

Таблица 32.1 (окончание) 

Смещение 

Описание 

15h 

Дескриптор — для жесткого диска — 0F8h, для дискет 3,5 дюйма  
и CD-ROM — 0F0h 

16h 

Количество секторов в FAT 

18h 

Количество секторов на дорожку (необходимо для прерывания 13h) 

1Ah 

Количество сторон (необходимо для прерывания 13h) 

1Сh 

Количество специальных спрятанных секторов (как правило, 0) 

24h 

Физический номер диска (начиная от 0) 

26h 

Расширенная сигнатура загрузочного диска 

27h 

Серийный номер тома 

2Bh 

Метка тома (может не соответствовать реальной) 

36h 

Идентификатор файловой системы диска (FAT, FAT32, VFAT и т. д.) 

 
Boot-сектор создается в процессе форматирования дискеты, причем его код раз-

личается в зависимости от того, какой программой производится форматирование. 

Например, утилита FORMAT.COM записывает программу, которая выдает на эк-

ран сообщение "Non-system disk or disk error" (несистемный диск или диск с ошиб-
кой), если на диске не найдены файлы операционной системы или они находятся  
в области плохих секторов (не смогли быть полностью прочитаны). После того как 
системные файлы загрузились, программа, расположенная в Boot-секторе, передает 
им управление и на этом ее работа заканчивается. 

Загрузочный  сектор  легко  восстанавливается  программами  типа  ScanDisk, 

Norton DiskDoctor и пр.  

32.1.3. Таблица размещения файлов (FAT) 

Куда  сложнее  восстановить  таблицу  размещения  файлов  (File  Allocation Table, 

FAT). Можно сказать, что 100-процентному восстановлению она вообще не подлежит. 

Таблица размещения файлов содержит ссылки на секторы, в которых последо-

вательно находятся очередные порции файлов. Принцип идентичен тому, который 
описывался в разд. 31.1.2

Начальный  сектор  файла  находится  в  том  каталоге,  в  котором  расположен 

файл. По  сути  дела,  любой  подкаталог,  кроме  корневого,  располагается  на  диске 
как обычный файл. В нем содержится следующая информация: 

 

имена и расширения файлов и подкаталогов, находящихся в этом каталоге; 

 

их размеры, дата и время создания, атрибуты; 

 

стартовый кластер файла. 
Когда  необходимо  загрузить  некоторый  файл,  неважно,  текстовый,  программ-

ный  или  иной,  операционная  система  получает  в  каталоге,  в  котором  находится 


background image

Глава 32. Все о диске и файловой системе 

305 

этот файл, его стартовый кластер и считывает в память. Если файл имеет больший 
размер, чем кластер, то ОС находит в таблице размещения файлов следующий кла-
стер,  затем  следующий  и  так  по  цепочке  до  тех  пор,  пока  не  получит  сигнал  по-
следнего кластера. Сигналом является число 

FFF0h

 для 16-битной FAT (FAT16) или 

FFFF:FFF0h

 для 32-битной (FAT32).  

Следует  отметить,  что  операционная  система  для  более  быстрого  доступа  

к файлам постоянно хранит в памяти заранее считанную таблицу размещения фай-
лов. Любое изменение длины или содержимого файла заносится на диск не только 
в область данных, но и в FAT, и в каталог, если стартовый кластер или размер фай-
ла изменились. 

В  начальных  секторах  диска  содержится,  как  правило,  две  копии  FAT —  если 

одна  повредится,  то  ОС  будет  использовать  вторую  копию.  При  проверке  диска 
специальными программами происходит сравнение двух копий. Если одна не соот-
ветствует другой, то проверяющая программа делает их идентичными, как и долж-
но быть.  

32.2. Удаление и восстановление файла 

Вы, вероятно, обратили внимание, что создание и запись файла на диск проис-

ходит дольше, чем его удаление. Это связано с тем, что операционная система не 
очищает  заполненные  удаляемым  файлом  сектора,  а  просто  вносит  изменения  
в  каталог  и  FAT.  При  этом  первый  символ  файла  в  каталоге  меняется  на 

0E5h

Вспомните  программу  восстановления  удаленных  файлов  —  она  запрашивает  
у пользователя первое имя восстанавливаемого файла. Если в названии файла пер-
вый символ 

0E5h

, то ОС такие файлы на экран не выводит, считая их удаленными, 

хотя физически названия в каталоге остаются до тех пор, пока создаваемый файл 
их не перезапишет. 

При  удалении  файла  изменяется  также  и  таблица  размещения  файлов.  Те  кла-

стеры,  которые  отмечены  за  удаляемым  файлом,  просто  обнуляются,  давая  воз-
можность записывать на их место другую информацию. Обращаем ваше внимание, 
что  содержимое  секторов  не  обнуляется,  только  FAT!  При  этом  становится  воз-
можным восстановление удаленного файла. Но не всегда! 

Если некоторая другая программа или ее часть уже записалась в освободившие-

ся секторы, то восстановить файл полностью, естественно, не удастся. Запомните: 
если вы случайно удалили важный файл, то немедленно прекратите всякую запись 
на диск, даже загрузку ОС с этого диска, т. к. операционная система сама периоди-
чески  производит  запись  (в  частности,  изменяет  SWAP-файл).  Лучший  способ — 
загрузиться с другой дискеты и запустить программу восстановления файлов.  

Однако и в этом случае нет 100-процентной гарантии его успешного восстанов-

ления. Если диск был сильно фрагментирован, да и файл имел немаленький размер, 
то программа восстановления файлов вам вряд ли поможет, т. к. файл может быть 
разбросан по всему диску: часть его может находиться в начале диска, часть в се-
редине  и  часть  в  конце.  А  так  как  FAT  обнулена,  то  и  восстанавливать  придется 
"вручную", используя при этом прямое редактирование диска (например, програм-
мой DiskEdit). Но это дело очень кропотливое и долгое. 


background image

 

Часть III. Файловая оболочка, вирус, резидент 

306 

32.3. Ошибки файловой системы 

32.3.1. Потерянные кластеры  
файловой системы FAT, FAT32 

Довольно часто на диске возникают так называемые потерянные кластеры. Это 

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

Как известно, данные не сразу пишутся на диск, а попадают в специально соз-

данную  кэш-память  (если  загружена  программа  типа  SmartDrv).  Когда  некоторая 
программа отправила порцию данных на диск, операционная система помещает их 
в кэш оперативной памяти, при этом может изменить FAT, корневой каталог и пр., 
но  данные  не  записываются  сразу.  Возможен  также  вариант,  когда  часть  данных 
записалась,  а  часть  не  успела.  И если в этот момент пользователь выключит ком-
пьютер  или  нажмет  кнопку  Reset,  то  на  диске  появляются  эти  самые  потерянные 
кластеры. 

Напоследок еще раз хотелось бы порекомендовать вам поработать с программой 

DiskEdit. Уверяем вас, что от этого вы ничего не потеряете, даже наоборот. Возь-
мите  чистую  дискету,  запишите  на  нее  несколько  файлов  и  просматривайте  
в DiskEditor. Вам откроются все секреты файловых систем FAT и FAT32.  

 
 


background image

 

 

 

 

 

 

П Р И Л О Ж Е Н И Я 

 

 


background image

 

 

 

Приложение 1 

 

Ассемблирование программ  
(получение машинного кода  
из ассемблерного листинга) 

П1.1. Загрузка MASM 6.10—6.13 

Для  перевода  ассемблерного  файла  в  машинный  код  необходимо  восполь-

зоваться  специальной  программой-ассемблером.  Наиболее  популярным  можно 
назвать мощный Microsoft Macro Assembler версий 6.10—6.13, который позволяет 
создавать  машинный  код  как  для  операционной  системы  MS-DOS,  так  и  для 
Windows.

1

 Если у вас уже установлено необходимое программное обеспечение, то 

просто переходите ко второму шагу. 

 

Загрузите  с  сайта  http://www.Kalashnikoff.ru  самораспаковывающийся  архив 
самой программы MASM.EXE (около 6 Мбайт). 

 

Распакуйте  полученный  архив.  Для  этого  запустите  загруженный  файл 
MASM.EXE в ОС Windows и укажите каталог, в который необходимо сохранить 
файлы из архива. 

 

Зайдите в каталог, в который был распакован архив с MASM (то, что вы указали 
в п. 2 выше). 

 

В подкаталоге BIN находятся основные программы. В нем вы можете создавать 
ASM-файлы и ассемблировать их так, как описывается далее.  

П1.2. Ассемблирование 

Программа-ассемблер (MASM, TASM, WASM, NASM и пр.) создает объектный 

файл  с  расширением  OBJ.  Данный  файл  является  переходным  между  ассемблер-
ным файлом (ASM) и программой (COM/EXE). 

В  случае  если  ассемблерный  листинг слишком  большой,  то  программу  разби-

вают на несколько частей. В большинстве случаев обходятся директивой 

include

 

(таким образом мы ассемблировали нашу оболочку). 

                                                           

1

 На сайте компании Microsoft в Центре загрузки (http://www.microsoft.com/downloads/en/default.aspx

свободно можно скачать Microsoft Macro Assembler 8.0 (MASM) Package (x86). — Ред.