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

2.1 Файлы

Требования к хранению информации:

    возможность хранения больших объемов данных

    информация должна сохраняться после прекращения работы процесса

    несколько процессов должны иметь одновременный доступ к информации

2.1.1 Именование файлов

Длина имени файла зависит от ОС, может быть от 8 (MS-DOS) до 255 (Windows, LINUX) символов.

ОС могут различать прописные и строчные символы. Например, WINDOWS и windows для MS-DOS одно и тоже, но для UNIX это разные файлы.

Во многих ОС имя файла состоит из двух частей, разделенных точкой, например windows.exe. Часть после точки называют расширением файла . По нему система различает тип файла.

У MS-DOS расширение составляет 3 символа. По нему система различает тип файла, а также можно его исполнять или нет.

У UNIX расширение ограничено размером имени файла в 255 символов, также у UNIX может быть несколько расширений, но расширениями пользуются больше прикладные программы, а не ОС. По расширению UNIX не может определить исполняемый это файл или нет.

2.1.2 Структура файла

Три основные структуры файлов:

    Последовательность байтов - ОС не интересуется содержимым файла, она видит только байты. Основное преимущество такой системы, это гибкость использования. Используются в Windows и UNIX.

    Последовательность записей - записей фиксированной длины (например, перфокарта), считываются последовательно. Сейчас не используются.

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

Три типа структур файла.

2.1.3 Типы файлов

Основные типы файлов:

    Регулярные - содержат информацию пользователя. Используются в Windows и UNIX.

    Каталоги - системные файлы, обеспечивающие поддержку структуры файловой системы. Используются в Windows и UNIX.

    Символьные - для моделирования ввода-вывода. Используются только в UNIX.

    Блочные - для моделирования дисков. Используются только в UNIX.

Основные типы регулярных файлов:

    ASCII файлы - состоят из текстовых строк. Каждая строка завершается возвратом каретки (Windows), символом перевода строки (UNIX) и используются оба варианта (MS-DOS). Поэтому если открыть текстовый файл, написанный в UNIX, в Windows, то все строки сольются в одну большую строку, но под MS-DOS они не сольются (это достаточно частая ситуация ). Основные преимущества ASCII файлов:
    - могут отображаться на экране, и выводится на принтер без преобразований
    - могут редактироваться почти любым редактором

    Двоичные файлы - остальные файлы (не ASCII). Как правило, имеют внутреннею структуру.

Основные типы двоичных файлов:

    Исполняемые - программы, их может обрабатывать сама операционная система, хотя они записаны в виде последовательности байт.

    Неисполняемые - все остальные.

Примеры исполняемого и не исполняемого файла

«Магическое число» - идентифицирующее файл как исполняющий.

2.1.4 Доступ к файлам

Основные виды доступа к файлам:

    Последовательный - байты читаются по порядку. Использовались, когда были магнитные ленты.

2.1.5 Атрибуты файла

Основные атрибуты файла:

    Защита - кто, и каким образом может получить доступ к файлу (пользователи, группы, чтение/запись). Используются в Windows и UNIX.

    Пароль - пароль к файлу

    Создатель - кто создал файл

    Владелец - текущий владелец файла

    Флаг "только чтение" - 0 - для чтения/записи, 1 - только для чтения. Используются в Windows.

    Флаг "скрытый" - 0 - виден, 1 - невиден в перечне файлов каталога (по умолчанию). Используются в Windows.

    Флаг "системный" - 0 - нормальный, 1 - системный. Используются в Windows.

    Флаг "архивный" - готов или нет для архивации (не путать сжатием). Используются в Windows.

    Флаг "сжатый" - файл сжимается (подобие zip архивов). Используются в Windows.

    Флаг "шифрованный" - используется алгоритм шифрования. Если кто-то попытается прочесть файл, не имеющий на это прав, он не сможет его прочесть. Используются в Windows.

    Флаг ASCII/двоичный - 0 - ASCII, 1 - двоичный

    Флаг произвольного доступа - 0 - только последовательный, 1 - произвольный доступ

    Флаг "временный" - 0 - нормальный, 1 - для удаления файла по окончании работы процесса

    Флаг блокировки - блокировка доступа к файлу. Если он занят для редактирования.

    Время создания - дата и время создания. Используются UNIX.

    Время последнего доступа - дата и время последнего доступа

    Время последнего изменения - дата и время последнего изменения. Используются в Windows и UNIX.

    Текущий размер - размер файла. Используются в Windows и UNIX.

2.1.6 Операции с файлами

Основные системные вызовы для работы с файлами:

    Create - создание файла без данных.

    Delete - удаление файла.

    Open - открытие файла.

    Close - закрытие файла.

    Read - чтение из файла, с текущей позиции файла.

    Write - запись в файл, в текущею позицию файла.

    Append - добавление в конец файла.

    Seek - устанавливает файловый указатель в определенную позицию в файле.

    Get attributes - получение атрибутов файла.

    Set attributes - установить атрибутов файла.

    Rename - переименование файла.

2.1.7 Файлы, отображаемые на адресное пространство памяти

Иногда удобно файл отобразить в памяти (не надо использовать системные вызовы ввода-вывода для работы с файлом), и работать с памятью, а потом записать измененный файл на диск.

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

При использовании сегментной организации памяти, файл загружают в отдельный сегмент.

Пример копирования файла через отображение в памяти.

Алгоритм:

    Создается сегмент для файла 1

    Файл отображается в памяти

    Создается сегмент для файла 2

    Сегмент 1 копируется в сегмент 2

    Сегмент 2 сохраняется на диске

Недостатки этого метода:

    Тяжело определить длину выходного файла

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

    Файл может оказаться большим, больше сегмента или виртуального пространства.

2.2 Каталоги

2.2.1 Одноуровневые каталоговые системы

В этой системе все файлы содержатся в одном каталоге.

Однокаталоговая система, содержащая четыре файла, файлов А два, но разных владельцев

Преимущества системы:

    Простота

    Возможность быстро найти файл, не надо лазить по каталогам

Недостатки системы:

    Различные пользователи могут создать файлы с одинаковыми именами.

2.2.2 Двухуровневые каталоговые системы

Для каждого пользователя создается свой собственный каталог.

Двухуровневая каталоговая система

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

Эту проблему можно решить созданием системного каталога, с общим доступом.

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

2.2.3 Иерархические каталоговые системы

Каждый пользователь может создавать столько каталогов, сколько ему нужно.

Иерархическая каталоговая система

Почти все современные универсальные ОС, организованы таким образом. Специализированным ОС это может быть не нужным.

2.2.4 Имя пути

Для организации дерева каталогов нужен некоторый способ указания файла.

Два основных метода указания файла:

    абсолютное имя пути - указывает путь от корневого каталога, например:
    - для Windows \usr\ast\mailbox
    - для UNIX /usr/ast/mailbox
    - для MULTICS >usr>ast>mailbox

    относительное имя пути - путь указывается от текущего каталога (рабочего каталога), например:
    - если текущий каталог /usr/, то абсолютный путь /usr/ast/mailbox перепишется в ast/mailbox
    - если текущий каталог /usr/ast/, то абсолютный путь /usr/ast/mailbox перепишется в mailbox
    - если текущий каталог /var/log/, то абсолютный путь /usr/ast/mailbox перепишется в../../usr/ast/mailbox

./ - означает текущий каталог

../ - означает родительский каталог

2.2.5 Операции с каталогами

Основные системные вызовы для работы с каталогами:

    Create - создать каталог

    Delete - удалить каталог

    OpenDir - закрыть каталог

    CloseDir - закрыть каталог

    Rename - переименование каталога

Обфускаторы

Отладчики

Отладчик или дебаггер (англ. debugger) является модулем среды разработки или отдельным приложением, предназначенным для поиска ошибок в программе. Отладчик позволяет выполнять пошаговую трассировку, отслеживать, устанавливать или изменять значения переменных в процессе выполнения программы, устанавливать и удалять контрольные точки или условия остановки и т. д.

Обфускация (от лат. obfuscare - затенять, затемнять; и англ. obfuscate - делать неочевидным, запутанным, сбивать с толку) или запутывание кода - приведение исходного текста или исполняемого кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции.

«Запутывание » кода может осуществляться на уровне алгоритма, исходного текста и/или ассемблерного текста. Для создания запутанного ассемблерного текста могут использоваться специализированные компиляторы, использующие неочевидные или недокументированные возможности среды исполнения программы. Существуют также специальные программы, производящие обфускацию, называемые обфускаторами (англ. Obfuscator).

Исполнимый (исполняемый) модуль, исполнимый файл (англ. executable file) - файл, содержащий программу в виде, в котором она может быть (после загрузки в память и настройки по месту) исполнена компьютером.

Чаще всего он содержит двоичное представление машинных инструкций для определённого процессора (по этой причине на программистском сленге в отношении него используют слово бинарник - кальку с английского binary), но может содержать и инструкции на интерпретируемом языке программирования, для исполнения которых требуется интерпретатор. В отношении последних часто используется термин «скрипт».

Исполнением бинарных файлов занимаются аппаратно- и программно-реализованные машины. К первым относятся процессоры - например, семейств x86 или SPARC. Ко вторым - виртуальные машины, например, виртуальная машина Java или.NET Framework. Формат бинарного файла определяется архитектурой исполняющей его машины. Известны машины, реализованные как аппаратно, так и программно, например, процессоры семейства x86 и виртуальная машина VMware.

Статус исполнимости файла чаще всего определяется принятыми соглашениями. Так, в одних операционных системах исполнимые файлы распознаются благодаря соглашению об именовании файлов (например, путём указания в имени расширения файла - .exe или.bin ), тогда как в других исполнимые файлы обладают специфичными метаданными (например, битом разрешения execute в UNIX-подобных операционных системах).

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



Зачастую исполнимые файлы содержат вызовы библиотечных функций, например, вызовы функций операционной системы. Таким образом, наряду с процессорозависимостью (машинозависимым является любой бинарный исполнимый файл, содержащий машинный код) исполнимым файлам может быть свойственна зависимость от версии операционной системы и её компонент.

Независимо от того включен компьютер или нет все данные и программы хранятся в долговременной (внешней) памяти компьютера в виде файлов – откуда они загружаются в процессе выполнения или обработки.

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

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

Уникальные имена обеспечивают возможность упорядочивания файлов и обеспечения доступа к ним операционной систем и других программ. Имя файла состоит из двух частей, разделенных точкой: собственно имя файла и расширение ,определяющееего тип (программа, данные и т. д.).Имяфайлу присваивает пользователь (иногда система по умолчанию). Тип файла обычно задается программой автоматически при егосоздании, что позволяет в большинстве случаев автоматизировать запуск программ. Например, .com, .exe – исполняемые файлы (программы), .txt, .rtf . doc текстовые файлы, .pas – исходный текст программы, написанной на языке Pascal .

Для упорядочения размещения файлов на дисках их имена регистрируются в специальных файлах – каталогах (в современных ОС эти файлы называют папками) . Каталог это файл–таблица (хранящаяся на том же диске, где и файлы), в которой хранятся имена файлов, сведения об их размере, времени последнего обновления, атрибуты (свойства) файла и т.д. Если в каталоге хранится имя файла, то нередко говорят, что файл «находится» в данном каталоге. В действительности файл располагается (сохраняется) в некоторой области памяти на диске компьютера, зачастую в виде нескольких частей, фрагментов на разных дорожках и дисках пакета (на свободных участках носителя). Соответствующая информация содержатся в каталоге.

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

Порядок хранения файлов на диске определяется организацией файловой системы (организации каталогов и способа описания в них размещения и атрибутов файлов).

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

Начальный, корневой каталог содержит вложенные каталоги 1-го уровня, в свою очередь в каждом из них бывают вложенные каталоги 2-го уровня и т. д. Каждый каталог имеет имя (без расширения), и он может быть зарегистрирован в другом, родительском каталоге. Необходимо отметить, что в каталогах всех уровней могут храниться не только каталоги, но и файлы.

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

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

    создание файлов и присвоение им имен;

    создание каталогов и присвоение им имен;

    переименование файлов и каталогов;

    копирование и перемещение файлов между дисками компьютера и между каталогами одного диска;

    удаление файлов и каталогов;

    навигация по файловой структуре с целью доступа к заданному файлу или каталогу;

    управление атрибутами файла.

Форматы исполняемых файлов

Виртуальная память процесса состоит из нескольких сегментов или областей памяти. Размер, содержимое и расположение сегментов в памяти определяется как самой программой, например, использованием библиотек, размером кода и данных, так и форматом исполняемого файла этой программы. В большинстве современных операционных систем UNIX используются два стандартных формата исполняемых файлов - COFF (Common Object File Format) и ELF (Executable and Linking Format).

Описание форматов исполняемых файлов может показаться лишним, однако представление о них необходимо для описания базовой функциональности ядра операционной системы. В частности, информация, хранящаяся в исполняемых файлах форматов COFF и ELF позволяет ответить на ряд вопросов весьма важных для работы приложения и системы в целом:

Какие части программы необходимо загрузить в память?

Как создается область для неинициализированных данных?

Какие части процесса должны быть сохранены в дисковой области свопинга (специальной области дискового пространства, предназначенной для временного хранения фрагментов адресного пространства процесса), например, при замещении страниц, а какие могут быть при необходимости считаны из файла, и таким образом не требуют сохранения?

Где в памяти располагаются инструкции и данные программы?

Какие библиотеки необходимы для выполнения программы?

Как связаны исполняемый файл на диске, образ программы в памяти и дисковая область свопинга?

На рис. 2.3 приведена базовая структура памяти для процессов, загруженных из исполняемых файлов форматов COFF и ELF, соответственно. Хотя расположение сегментов различается для этих двух форматов, основные компоненты одни и те же. Оба процесса имеют сегменты кода (text), данных (data), стека (stack). Как видно из рисунка, размер сегментов данных и стека может изменяться, а направление этого изменения определяется форматом исполняемого файла. Размер стека автоматически изменяется операционной системой, в то время как управление размером сегмента данных производится самим приложением. Эти вопросы мы подробно обсудим в разделе "Выделение памяти" далее в этой главе.

Рис. 2.3 . Исполняемые образы программ форматов COFF и ELF

Сегмент данных включает инициализированные данные, копируемые в память из соответствующих разделов исполняемого файла, и неинициализированные данные, которые заполняются нулями перед началом выполнения процесса. Неинициализированные данные часто называют сегментом BSS.

Из книги Photoshop CS2 и цифровая фотография (Самоучитель). Главы 1-9 автора Солоницын Юрий

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

11.4.2. Форматы файлов шрифтов В недавние времена буквально каждый графический редактор или издательская программа использовали свой формат файлов шрифтов и, как правило, одни программы не поддерживали форматы других. Со временем число реально используемых форматов

Из книги Adobe Photoshop CS3 автора Завгородний Владимир

Глава 4 Форматы графических файлов Для хранения растровой графики существует большое количество различных форматов файлов. Среди них есть как универсальные форматы, не привязанные к какой-либо конкретной программе, так и специфические «персональные» форматы растровых

Из книги Adobe InDesign CS3 автора Завгородний Владимир

Форматы графических файлов Adobe InDesign может импортировать графические файлы различных форматов – как наиболее распространенные AI, BMP, EPS, GIF, JPEG, PDF, PSD, TIFF, так и более редкие DCS, EMF, PCX, PICT, PNG, SCT (ScitexCT), WMF.Все графические форматы и файлы разделяются по типу информации, которую они

Из книги Интернет решения от доктора Боба автора Сворт Боб

1. Форматы кодирования файлов Интернет Форматы файлов Интернет можно разделить на несколько групп. Во первых форматы передачи файлов по FTP, для чего очень давно была разработана схема uuencode/decode, замененная затем на xxencode/decode. В дальнейшем произошел отказ в пользу Base64 и MIME,

автора Реймонд Эрик Стивен

3.1.6. Двоичные форматы файлов Если в операционной системе применяются двоичные форматы для важных данных (таких как учетные записи пользователей), вполне вероятно, что традиции использования читабельных текстовых форматов для приложений не сформируются. Более подробно

Из книги Photoshop CS3: Обучающий курс автора Тимофеев Сергей Михайлович

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

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

3.1.6. Двоичные форматы файлов Если в операционной системе применяются двоичные форматы для важных данных (таких как учетные записи пользователей), вполне вероятно, что традиции использования читабельных текстовых форматов для приложений не сформируются. Более подробно о

Из книги Сетевые средства Linux автора Смит Родерик В.

Форматы файлов шрифтов Существуют два типа шрифтов: растровые и контурные (контурные шрифты часто называют масштабируемыми). Эти типы шрифтов имеют разные свойства и обрабатываются различными способами. Большинство серверов шрифтов, предназначенных для выполнения в

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов автора Дронов Владимир

Форматы файлов и форматы кодирования Форматов мультимедийных файлов существует не меньше, чем форматов файлов графических. Как и в случае с интернет-графикой, Web-обозреватели поддерживают далеко не все мультимедийные форматы, а только немногие. (Хотелось бы автору

Из книги Компьютерная обработка звука автора Загуменнов Александр Петрович

Форматы звуковых файлов Ad Lib Sample SMPФормат используется звуковой картой Ad Lib Gold для загрузки в нее семплов инструментов. Поддерживает 8/16-битный звук, моно/стерео, 4-битную компрессию Yamaha ADPCM. Файлы этого формата имеют расширение. smp.Amiga SVXЭтот тип файла применяется на

Из книги Создаем вирус и антивирус автора Гульев Игорь А.

Приложение А Форматы заголовков EXE-файлов Формат заголовка обычного EXE-файлаВ начале EXE-файла расположена форматированная часть заголовка EXE-файла (Таблица А-1).Далее следует таблица настройки адресов (Relocation Table), состоящая из длинных указателей (смещение: сегмент) на те

Из книги Photoshop CS4 автора Жвалевский Андрей Валентинович

Форматы графических файлов Формат – это способ записи изображения в виде файла. Существует довольно много форматов графических файлов, однако в большинстве случаев используется всего несколько. Каждый из них имеет характерные особенности, поэтому мы рекомендуем

Из книги Цифровая фотография. Трюки и эффекты автора Гурский Юрий Анатольевич

Форматы файлов Существует множество способов сохранить информацию об изображении и, следовательно, множество форматов файлов. Внимание! Чтобы избежать потерь данных, при работе с изображениями сохраняйте их в формате TIFF или в «родном» формате программы-редактора. JPEGВ

Из книги Windows 10. Секреты и устройство автора Алмаметов Владимир