Введение в NASM (низкоуровневое программирование для Windows) [Игорь Орещенков] (fb2) читать постранично, страница - 3
[Настройки текста] [Cбросить фильтры]
- 1
- 2
- 3
- 4
- 5
- . . .
- последняя (6) »
nasmw -p C:\W32NASM\INC\ win32n.inc -f win32 hello.asm
При выполнении этой команды NASM скомпилирует файл hello.asm, предварительно ознакомившись с описаниями констант и типов данных Win32 API, которые хранятся в файле win32n.inc. Результатом компиляции станет объектный файл hello.obj в формате Microsoft Win32 Object File. Более подробную информацию о параметрах командной строки компилятора NASMW.EXE можно получить из сопроводительной документации или запустив его с ключом -h. NASM позволяет создавать объектные файлы как формата Microsoft Win32 Object File, так и Microsoft OMF Object File. В исходных файлах первого типа нельзя использовать директивы import и export, и связь с функциями динамических библиотек может быть осуществлена только с использованием библиотек импорта. Зато предопределены идентификаторы для описания секций .text, .data, .bss. Исходный текст в этом случае может иметь следующую структуру:
global main extern MessageBox extern ExitProcess
segment .data … segment .bss … segment .text
main: … push dword 0 call [ExitProcess]
Для получения исполняемого файла придется выполнить следующие команды:
C:\> nasmw -f win32 main.asm C:\> alink -oPE main.obj win32.lib -entry main
Кстати, если при компиляции будет получено сообщение об ошибке типа «attempt to define a local label before any non-local labels», то, скорее всего, в исходном тексте записано нечто вроде «.text» вместо «segment .text». Если выходной файл должен иметь формат Microsoft OMF Object File, то следует использовать ключ -f obj. В файлах этого типа можно использовать директивы import и export, что позволяет создавать с их помощью библиотеки импорта для DLL-библиотек, которые можно компоновать с win32-файлами. Кроме того, для файлов этого типа предопределена метка ..start, которая отмечает точку входа. Структура исходного файла в этом случае может иметь следующий вид:
SECTION DATA USE32 CLASS=DATA … SECTION BSS USE32 CLASS=DATA … SECTION CODE USE32 CLASS=CODE … ..start: …
и компилироваться он должен так:
C:\> nasmw -f obj main.asm
Традиционная последовательность создания программы на языке ассемблера (опуская такие важные технологические этапы, как постановка задачи, проектирование, тестирование и отладка) состоит из трех основных шагов (рис. 2):
Рис. 2. Этапы создания исполняемого модуля из исходных текстов
Из этой схемы видно, что компилятор нужен только на втором шаге. Как же создать файл с исходным текстом? Использовать «Блокнот»? Можно, конечно, и так, но, чтобы не портить нервы и сразу воспитывать хороший вкус, стоит обратиться к свободно распространяемому продукту ASM Editor for Windows от AV(T) [6]. Что вы получите в этом случае? Кроме приятной цветовой гаммы рабочего пространства — подсветку синтаксиса, настраиваемую контекстную помощь и возможность автоматизировать процесс компиляции. Фактически ASM Editor является интегратором инструментов разработчика, заслуживающим звание IDE. Итак, текст набран и скомпилирован. Как же получить долгожданный EXE-файл? Для этого необходим компоновщик. Для NASM традиционно рекомендуют использовать ALink от Anthony A.J. Williams. Что же, автор этой статьи не имеет возражений против такого предложения. Действительно, ALink прекрасно справляется с компоновкой объектных файлов как формата MS/Intel OMF, так и формата MS-COFF, к Windows-программе без проблем можно подключить необходимые ресурсы. Кстати, о ресурсах. Можно, конечно, было бы обойти этот вопрос стороной, так как программы получаются вполне функциональными и без них. Однако в большинстве случаев использование ресурсов позволяет делать некоторые вещи проще и красивее. Как известно, ресурс может быть описан в обычном текстовом файле. Для преобразования таких файлов в формат, пригодный для компоновки, можно использовать компилятор ресурсов GoRC от Jeremy Gordon. Если же появляется необходимость в правке ресурсов в скомпилированных файлах, то здесь нет равных программе Resource Hacker [7] от Angus Johnson. Казалось бы, приведен весь перечень необходимых для низкоуровневого программирования инструментов. Но, к сожалению, программы на ассемблере не меньше, а, скорее, больше программ на языках высокого уровня подвержены ошибкам программиста. И для успешной борьбы с этим неприятным явлением необходим мощный инструмент, позволяющий отследить по шагам выполнение программы и найти тот самый проблемный байт. Одним словом, необходим отладчик. В соответствии с договоренностью вести разработку под Windows можно посоветовать Olly Debugger [8] от Oleh Yuschuk. Это действительно стоящая вещь, имеющая встроенный анализатор кода, который графически отображает циклы и переходы. Очень удобен встроенный справочник по функциям Win32 API.
- 1
- 2
- 3
- 4
- 5
- . . .
- последняя (6) »
Последние комментарии
7 часов 43 минут назад
1 день 1 час назад
1 день 1 час назад
1 день 1 час назад
1 день 1 час назад
1 день 1 час назад