Язык ассемблера. компилятор fasm.

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

Преимущества знания ассемблера:

  • Глубокое понимание работы компьютера и операционной системы.
  • Максимальная гибкость при работе с аппаратными ресурсами.
  • Оптимизация программ по скорости выполнения.
  • Оптимизация программ по размеру кода.
  • Дизассемблирование и отладка.

1 — Глубокое понимание работы компьютера и операционной системы

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

2 — Максимальная гибкость при работе с аппаратными ресурсами

Используя ассемблер, можно делать с компьютером все что угодно. А языки высокого уровня ограничены компилятором и используемыми библиотеками. Такие современные языки, как Java и C# вообще не позволяют работать с аппаратными ресурсами и операционной системой напрямую.

3 — Оптимизация программ по скорости выполнения.

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

4 — Оптимизация программ по размеру кода

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

5 — Дизассемблирование и отладка

Дизассемблирование — процесс и/или способ получения исходного текста программы на ассемблере из программы в машинных кодах. Целью дизассемблирования обычно является изменение чужих программ (чаще всего это взлом защиты). Если вы попытаетесь просмотреть в текстовом редакторе файлы с расширением .ехе , то увидите непонятную смесь символов. Это инструкции для процессора. Компьютер читает и исполняет их. Но иногда человек тоже хочет понять, что записано в этих файлах. Тогда он выполняет дизассемблирование. Дизассемблирование превращает исполняемый файл в текст программы на ассемблере. Если вы знаете ассемблер, у вас появляется часть прочесть текст программы и внести в него изменения.

Ассемблер очень может помочь и при отладке. Иногда случаются ошибки и в компиляторах. Вроде бы корректно написанный код выполняется вовсе не так, как предполагалось. Чтобы обнаружить такую ошибку надо посмотреть во что скомпилировался код, а разобраться в этом без ассемблера невозможно.

Учиться программировать начнем с процессора Intel 8086. Будем писать программы под DOS. Практическая ценность от программирования под DOS в наше время не очень большая, если вы, конечно, не собираетесь тесно работать с этой операционной системой. Но она позволит быстро освоить основы ассемблера, а потом мы уже перейдем к программированию под 32-битные системы.

Для программирования на ассемблере прежде всего необходим компилятор. Наиболее известные компиляторы это TASM, MASM и FASM. Мы будем использовать FASM. Это довольно новый, удобный, быстро развивающийся компилятор ассемблера, написанный на себе самом. Его преимущества — это поддержка сложных макросов и мультиплатформенность. Есть версии под DOS, Windows и Linux.

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

Последнюю версию FASM’a можно скачать с официального сайта http://www.flatassembler.net/. Для установки содержимое архива надо распаковать в какую-нибудь папку. Например, папка C:\FASM.

Для отладки написанных программ будем использовать старый добрый Turbo Debugger из пакета TASM. Архив также надо распаковать в какую-нибудь папку. Например, папка
C:\TD.

[gamehacking] Изучаем fasm — часть 1


Похожие статьи.

Понравилась статья? Поделиться с друзьями: