Практически все проекты на языках С и C++ состоят из нескольких файлов с исходным текстом и подключаемых стандартных или собственных библиотек.
Чтобы ориентироваться в дереве исходных текстов проекта и представлять различные источники ошибок, необходимо не только знать языки С и C++, но и четко представлять, каким образом происходит трансляция программ от исходного текста до исполняемого файла.
Пакет компиляторов GCC генерирует исполняемые файлы в формате elf. В дальнейшем исполняемый файл, если это необходимо, преобразуется в требуемый формат утилитой objcopy, входящий в тот же пакет GCC.
Рассмотрим стадии трансляции программы от исходного текста до исполняемого кода пакета компиляторов GCC (рис. 5).
Препроцессор. Первая стадия трансляции — препроцессинг исходного текста. В пакете компиляторов GCC препроцессор называется срр. Задача препроцессора — изменить исходный код программы в соответствии с директивами препроцессора.
Все директивы препроцессора языков С и C++ начинаются с символа # (решетка).
Куда девается свободное место ни диске С #shorts
Список основных директив препроцессора с примерами приведен в табл. 2. В различных реализациях препроцессоров возможны различные дополнительные директивы, но с целью улучшения переносимости кода рекомендуем по возможности использовать только директивы, рекомендованные стандартом ISO/IEC 9899.
Директивы препроцессора языков С и C++
задает макроопределение (макрос) или символическую константу
отменяет макроопределение (макрос) или символическую константу, заданные ранее директивой (/define
вставляет текст из указанного файла
осуществляет условную компиляцию при истинности константного выражения
осуществляет условную компиляцию, если заданная символическая константа определена
осуществляет условную компиляцию, если заданная символическая константа не определена
ветка условной компиляции при ложности выражения
ветка условной компиляции, образуемая слиянием #else и #if
конец ветки условной компиляции
выдача диагностического сообщения об ошибке и прекращение трансляции программы
Подробиое описание директив препроцессора языков С, C++ и примеры их использования можно найти, например, в [6].
ТРАНСЛЯЦИЯ
От исходного кода до исполняемого файла.
Исходный код
*.с *.схх *.срр
Заголовочные файлы
*.h *.hpp
Препроцессор Срр
Препроцессированный файл
*.Е
Компилятор язка gCC
Исходный код на языке ассемблера *.S
Ассемблер aS
Объектный код
Исполняемый файл в формате elf
Дополнительные преобразования исполняемого файла
Дополнительные преобразования не обязательны.
Рис. 5. Трансляция программы на языках Си C++
Компилятор. Вторая стадия трансляции программы — компиляция. Компиляция — это преобразование препроцессированного исходного кода на языках С и C++ в исходный код на языке ассемблера. Пакет GCC имеет различные компиляторы для языков С и C++: сс для языка С и g++ для языка C++.
Как сохранить личные файлы и программы при обновлении с Windows 7 до Windows 10, восстановлении 10
Ассемблер. Исходный код на языке ассемблера, полученный в результате компиляции, преобразуется в объектный код с помощью ассемблера as, входящего в пакет GCC. Объектный код — это исполняемый двоичный код с указанием секций и неопределенными абсолютными адресами меток. Вместо меток используются символические имена.
Линкер. Полученные после ассемблирования один или несколько файлов с объектным кодом поступают на вход компоновщика (линкера) Id. В соответствии с заданными ключами линкер создает объектный файл или разделяемую библиотеку. Задача компоновщика — связать все объектные файлы, т. е. сгенерировать таблицу адресов меток и заменить символические имена меток на абсолютные адреса.
Выходом компоновщика является исполняемый файл или разделяемая библиотека в формате elf.
Дополнительные преобразования. Если требуется получить исполняемый код в формате, отличном от elf, то его необходимо преобразовать в требуемый формат утилитой objcopy. Например, программаторы процессоров AVR обычно требуют исполняемый код в форматах hex или bin.
Источник: bstudy.net
Трансляция и компоновка программ
Для преобразования исходной программы в исполняемый модуль необходимо выполнить следующие действия.
1. Оттранслировать исходную программу. В результате будет создан объектный файл (.OBJ), а также (хотя и не обязательно) файл перекрестных ссылок и файл листинга (.LST).
2. Скомпоновать полученный объектный файл. При этом будет создан исполняемый файл (.ЕХЕ), а также, возможно, файл карты связей (.MAP) и файл библиотеки (.LIB). Компоновка может соединить несколько объектных файлов в единый исполняемый файл.
3. Полученный файл типа .ЕХЕ можно преобразовать в .СОМ.
Термин путь означает директорию и файл в применении к файлам и программам; его можно заменять требуемым значением, например, С: или C:TEMP.
Borland Turbo Assembler (TASM)
Turbo Assembler позволяет транслировать несколько файлов, каждый со своими собственными опциями, одной командной строкой. В командной строке можно использовать символы замены (* и ?). Для трансляции всех исходных файлов в текущей директории используйте команду TASM *. Для трансляции программ с именами PROG1.ASM, PROG2.ASM, и т.д. введите TASM PROG?. Можно вводить группы имен файлов, разделяя их знаком +. Следующая командная строка транслирует PROG1 и PROG2 с ключом /L и PROG3 с ключом /Z:
TASM /L PROG1 PR0G2+ /Z PROG3
Ключ /L указывает TASM сгенерировать файл .LST, а ключ /Z – вывести на экран все строки исходного кода с ошибками. Ввод команды TCREF без параметров выводит справку по этой программе (ключи и параметры командной строки). Режим Ideal имеет много дополнительных возможностей. Borland предлагает еще две версии ассемблеров, TASMX и TASM32, предназначенные для защищенного режима (protected mode).
Файлы перекрестных ссылок
Файл .XRF используется для создания листингов перекрестных ссылок, меток, символов и переменных программы. Используйте программу TCREF для преобразования его в отсортированный файл перекрестных ссылок:
Командная строка для компоновки программ TASM следующая:
Преобразование объектных файлов в файлы типа .СОМ
Используйте программу TLINK для прямого преобразования объектного файла в файл .СОМ, если исходная программа была написана с учетом требований, предъявляемых к файлам типа .СОМ. Используйте ключ /Т:
Чтобы использовать Turbo Debugger для отладки, используйте ключ /ZI при трансляции и ключ /V – для компоновки, например, TLINK /V имя файла.
За листингами в файлах .LST следуют таблицы сегментов и групп и таблицы символов.
Таблица сегментов и групп
Эта таблица имеет заголовок, подобный следующему:
Name Length Align Combine Class
Name (имя) — это столбец, в котором перечислены имена всех сегментов и групп в алфавитном порядке.
Столбец Length (длина) указывает в шестнадцатеричном виде длины сегментов.
Столбец Align (выравнивание) указывает типы выравнивания сегментов, например, BYTE, WORD или PARA.
Столбец Combine (совмещение) указывает определенные для сегментов типы совмещения, например, STACK для стековых сегментов, NONE, если совмещение не определено, PUBLIC — для внешних определений, или шестнадцатеричный адрес – для определений AT.
Столбец Class (класс) указывает имена классов сегментов, указанные в директивах SEGMENT.
Эта таблица имеет приблизительно такой заголовок:
Name Type Value Attribute
Столбец Name (имя) перечисляет имена всех определенных в программе элементов в алфавитном порядке.
Столбец Туре (тип) указывает типы элементов, например:
• L NEAR или L FAR – для меток типа near и far, соответственно;
• N PROC или F PROC – для процедур типа near и far, соответственно;
• BYTE, WORD, DWORD, FWORD, QWORD или TBYTE – для элементов данных;
• ALIAS – псевдоним для другого символа;
• NUMBER – абсолютная метка;
• OPCODE – подстановка (замена) для операнда инструкции;
• TEXT – подстановка для текста.
Столбец Value (значение) содержит смещение начала сегмента для имен, меток и процедур в шестнадцатеричной форме.
Столбец Attribute (атрибут) содержит атрибуты символа, включая его сегмент и длину.
Составитель: Лянцев Олег Дмитриевич
ПРИМЕНЕНИЕ СИСТЕМНЫХ ФУНКЦИЙ
В ЗАДАЧАХ ПРОГРАММИРОВАНИЯ
Лабораторный практикум по дисциплине
«Системное программное обеспечение»
Подписано к печати . . . Формат 60х84 1/16.
Бумага офсетная. Печать плоская. Гарнитура Таймс.
Усл. печ. л. 2,5. Усл. кр. — отт. 2,5. Уч. — изд. л. 2,4.
Тираж 100 экз. Заказ № .
ГОУ ВПО Уфимский государственный авиационный
Центр оперативной полиграфии УГАТУ
450000, Уфа-центр, ул. К. Маркса, 12
Дата добавления: 2018-04-04 ; просмотров: 869 ; Мы поможем в написании вашей работы!
Источник: studopedia.net
Системы программирования. Состав СП. Этапы трансляции программы. Виды трансляции
-Системой программированияназывается комплекс программ, предназначенный для автоматизации программирования задач на ЭВМ (2, 569). Система программирования освобождает проблемного пользователя или прикладного программиста от необходимости написания программ решения своих задач на неудобном для него языке машинных команд, и предоставляют им возможность использовать специальные языки более высокого уровня. Для каждого из таких языков, называемых входными или исходными, система программирования имеет программу, осуществляющую автоматический перевод (трансляцию) текстов программы с входного языка на язык машины. Обычно система программирования содержит описания применяемых языков программирования, программы-трансляторы с этих языков, а также развитую библиотеку стандартных подпрограмм. Важно различать язык программирования и реализацию языка.
-Состав системы программирования:
служебные программы (редакторы, отладчики, оптимизаторы, интерпретаторы);
информационное обеспечение (описания языков, служебных программ, модулей).
-Виды трансляторов
Трансляторы подразделяют на:
Адресный. Функциональное устройство, преобразующее виртуальный адрес в реальный адрес
Диалоговый. Обеспечивает использование языка программирования в режиме разделения времени.
Многопроходной. Формирует объектный модуль за несколько просмотров исходной программы.
Обратный. То же, что детранслятор (декомпилятор, дизассемблер).
Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.
Оптимизирующий. Выполняет оптимизацию кода в создаваемом объектном модуле.
Синтаксически-ориентированный (синтаксически-управляемый). Получает на вход описание синтаксиса и семантики языка и текст на описанном языке, который и транслируется в соответствии с заданным описанием.
Тестовый. Набор макрокоманд языка ассемблера, позволяющих задавать различные отладочные процедуры в программах, составленных на языке ассемблера
-Этап трансляции. Каждый транслятор при обработке программы выполняет следующие действия:
• семантический анализ и генерация кода.
Компьютерные вирусы, их классификация. Типы антивирусных программ. Средства профилактики и борьбы с вирусами. Действия при заражении вирусом.
Компьютерные вирусы и их классификация
Компьютерный вирус — это специально написанная небольшая по размерам программа, имеющая специфический алгоритм, направленный на тиражирование копии программы, или её модификацию и выполнению действий развлекательного, пугающего или разрушительного характера.
Тем или иным способом вирусная программа попадает в компьютер и заражает их. Программа, внутри которой находится вирус, называется зараженной. Когда такая программа начинает работу, то сначала управление получает вирус. Вирус находит и заражает другие программы, а также выполняет какие-либо вредоносные действия.
Например, портит файлы или таблицу размещения файлов на диске, занимает оперативную память и т.д. После того, как вирус выполнит свои действия, он передает управление той программе, в которой он находится, и она работает как обычно. Тем самым внешне работа зараженной программы выглядит так же, как и незараженной. Поэтому далеко не сразу пользователь узнаёт о присутствии вируса в машине.
Многие разновидности вирусов устроены так, что при запуске зараженной программы вирус остается в памяти компьютера и время от времени заражает программы и выполняет нежелательные действия на компьютере. Пока на компьютере заражено относительно мало программ, наличие вируса может быть практически незаметным.
К числу наиболее характерных признаков заражения компьютера вирусами относятся следующие:
- некоторые ранее исполнявшиеся программы перестают запускаться или внезапно останавливаются в процессе работы;
- увеличивается длина исполняемых файлов;
- быстро сокращается объём свободной дисковой памяти;
- на носителях появляются дополнительные сбойные кластеры, в которых вирусы прячут свои фрагменты или части повреждённых файлов;
- замедляется работа некоторых программ;
- в текстовых файлах появляются бессмысленные фрагменты;
- наблюдаются попытки записи на защищённую дискету;
- на экране появляются странные сообщения, которые раньше не наблюдались;
- появляются файлы со странными датами и временем создания (несуществующие дни несуществующих месяцев, годы из следующего столетия, часы, минуты и секунды, не укладывающиеся в общепринятые интервалы и т. д.);
- операционная система перестаёт загружаться с винчестера;
- появляются сообщения об отсутствии винчестера;
- данные на носителях портятся.
Любая дискета, не защищённая от записи, находясь в дисководе заражённого компьютера, может быть заражена. Дискеты, побывавшие в зараженном компьютере, являются разносчиками вирусов. Существует ещё один канал распространения вирусов, связанный с компьютерными сетями, особенно всемирной сетью Internet. Часто источниками заражения являются программные продукты, приобретённые нелегальным путем.
Существует несколько классификаций компьютерных вирусов:
1. По среде обитания различают вирусы сетевые, файловые, загрузочные и файлово-загрузочные.
2. По способу заражения выделяют резидентные и нерезидентные вирусы.
3. По степени воздействия вирусы бывают неопасные, опасные и очень опасные;
4. По особенностям алгоритмоввирусы делят на паразитические, репликаторы, невидимки, мутанты, троянские, макро-вирусы.
Загрузочные вирусы заражают загрузочный сектор винчестера или дискеты и загружаются каждый раз при начальной загрузке операционной системы.
Резидентные вирусы загружается в память компьютера и постоянно там находится до выключения компьютера.
Самомодифицирующиеся вирусы (мутанты)изменяют свое тело таким образом, чтобы антивирусная программа не смогла его идентифицировать.
Стелс-вирусы (невидимки) перехватывает обращения к зараженным файлам и областям и выдают их в незараженном виде.
Троянские вирусы маскируют свои действия под видом выполнения обычных приложений.
Вирусом могут быть заражены следующие объекты:
1. Исполняемые файлы, т.е. файлы с расширениями имен .com и .exe, а также оверлейные файлы, загружаемые при выполнении других программ. Вирусы, заражающие файлы, называются файловыми.Вирус в зараженных исполняемых файлах начинает свою работу при запуске той программы, в которой он находится.
Наиболее опасны те вирусы, которые после своего запуска остаются в памяти резидентно — они могут заражать файлы и выполнять вредоносные действия до следующей перезагрузки компьютера. А если они заразят любую программу из автозапуска компьютера, то и при перезагрузке с жесткого диска вирус снова начнет свою работу.
2. Загрузчик операционной системы и главная загрузочная запись жесткого диска. Вирусы, поражающие эти области, называются загрузочными. Такой вирус начинает свою работу при начальной загрузке компьютера и становится резидентным, т.е. постоянно находится в памяти компьютера.
Механизм распространения загрузочных вирусов — заражение загрузочных записей вставляемых в компьютер дискет. Часто такие вирусы состоят из двух частей, поскольку загрузочная запись имеет небольшие размеры и в них трудно разместить целиком программу вируса. Часть вируса располагается в другом участке диска, например, в конце корневого каталога диска или в кластере в области данных диска. Обычно такой кластер объявляется дефектным, чтобы исключить затирание вируса при записи данных на диск.
3. Файлы документов, информационные файлы баз данных, таблицы табличных процессоров и другие аналогичные файлы могут быть заражены макро-вирусами. Макро-вирусы используют возможность вставки в формат многих документов макрокоманд.
Если не принимать мер по защите от вирусов, то последствия заражения могут быть очень серьезными. Например, в начале 1989 г. вирусом, написанным американским студентом Моррисом, были заражены и выведены из строя тысячи компьютеров, в том числе принадлежащих министерству обороны США. Автор вируса был приговорен судом к трем месяцам тюрьмы и штрафу в 270 тыс. дол. Наказание могло быть и более строгим, но суд учел, что вирус не портил данные, а только размножался.
Источник: megaobuchalka.ru