Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек_1_5_Базовые инструментальные средства.doc
Скачиваний:
4
Добавлен:
21.09.2019
Размер:
94.72 Кб
Скачать

Ассемблеры gas и nasm

Использование языка ассемблера в Linux происходит гораздо реже, чем, например, в DOS. Драйверы устройств в Linux гораздо чаще пишутся на языке C, а затем обрабатываются оптимизирующим компилятором, например, gcc. Однако, если вам непременно требуется ассемблер, его можно использовать. Основная причина, по которой используется ассемблер в Linux ‑ это написание очень небольших по размеру программ, которые не зависят от системных библиотек. Такие программы особенно нужны для встраиваемых систем, где объемы запоминающих устройств обычно невелики.

GAS - это сокращение от GNU Assembler. Поскольку GAS был разработан для поддержки 32-битных компиляторов Unix, он использует стандартный синтаксис ATT, который несколько отличается от обычного ассемблера DOS.

Ассемблер NASM разрабатывается в рамках проекта The Netwide Assembler, и представляет собой мощный ассемблер на базе i386, написанный на C, который построен по модульному принципу и обеспечивает поддержку практически всех известных синтаксисов и форматов объектных файлов. Используется синтаксис Intel. Поддерживается обработка макроопределений. Среди поддерживаемых форматов объектных файлов есть bin, aout, coff, elf, as86, obj (DOS), win32, rdf (собственный формат). Кроме того, NASM поставляется с дизассемблером NDISASM.

Отладчик gdb

Отладчиком называется программа, которая выполняет внутри себя другую программу. Основное назначение отладчика ‑ дать возможность пользователю в определенной степени осуществлять контроль за выполняемой программой, т.е. определять, что происходит в процессе ее выполнения. Наиболее известным отладчиком для Linux является программа GNU GDB, которая содержит множество полезных возможностей, но для простой отладки достаточно использовать лишь некоторые из них.

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

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

Эти действия требуют, чтобы пользователь отладчика был в состоянии:

  1. проанализировать данные программы;

  2. получить трассу - список вызовов функций, которые были выполнены, с сортировкой, указывающей, кто кого вызывал;

  3. установить точки останова, в которых выполнение программы приостанавливается, чтобы можно было проанализировать данные;

  4. выполнять программу по шагам, чтобы увидеть, что в действительности происходит.

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

Чтобы указать компилятору (gcc), что планируется отладка программы (а для этого в коде программы должна быть дополнительная информация), следует добавить ключ -g в опции компиляции и компоновки. Например, если программа состоит из двух файлов main.C и utils.C, можно откомпилировать ее командами:

gcc -c -g -Wall main.C

gcc -c -g -Wall utils.C

gcc -g -o myprog main.ob utils.o

или одной командой:

gcc -g -Wall -o myprog main.o utils.o

Обе последовательности команд приводят к созданию исполняемого файла myprog.

Чтобы выполнить полученную программу под управлением gdb, следует ввести команду

gdb myprog

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