Содержание.1
Содержание.2
Введение.3
Постановка задачи.4
Формат файла класса.5
Структура файла класса.5
Типы элементов Constant_pool6
Формат структуры field_info. 7
Формат структуры method_info. 7
Формат атрибута Code.8
Работа JVM.. 10
Система команд JVM.12
Синтаксис языка ассемблера для платформы Java (языка JASM).14
Тестовые примеры.18
1.18
2.19
3.20
Проектирование и реализация компилятора.25
Заключение.30
Использованная литература.31
Язык программирования Java был разработан в середине 90-х годов на основе языка Oak, предназначавшегося для программирования «прошивок» для различных электронных устройств. Однако, в отличие от своего предшественника, язык Java получил широкое распространение, прежде всего как язык, использовавшийся в программировании для сети Интернет. В настоящее время область применения Java значительно расширилась, и этот язык часто применяется и в обычном прикладном программировании. Это обусловлено такими преимуществами как кроссплатформенность и безопасность, которые обеспечиваются тем, что исходный код на Java компилируется не непосредственно в машинный код, а в, так называемый, байт-код, который интерпретируется виртуальной машиной Java (JVM). Во многих современных реализациях JVM байт-код перед выполнением преобразуется в машинные инструкции, что значительно повышает производительность, приближая ее к производительности программ, написанных на C/C++. Таким образом, Java, в современном состоянии этой технологии, сочетает преимущества интерпретируемых и компилируемых языков программирования.
Спецификация, описывающая JVM, как абстрактную вычислительную машину, предоставлена компанией Sun в открытый доступ. Это позволяет создавать как собственные реализации JVM для различных платформ, так и альтернативные компиляторы, генерирующие байт-код Java, в том числе для языков программирования, отличных от Java. Большинство литературы, посвященной Java, почти не уделяет внимания устройству JVM и описывает лишь сам язык Java. Однако, в ряде случаев, знание особенностей архитектуры бывает весьма полезным. В данной работе я создал учебную программу, которая может помочь в изучении архитектуры JVM – несложный ассемблер для байт-кода Java.
Постановка задачи.Требуется изучить архитектуру уровня команд платформы Java, формат файла класса Java, и написать компилятор ассемблероподобного языка, позволяющего создавать файлы классов, корректно обрабатываемые реальной JVM. Данный компилятор должен поддерживать все команды байт-кода Java и важнейшие возможности JVM.
Формат файла класса.Основным форматом исполняемых файлов в архитектуре Java является формат файла класса, описанный в The JavaTM Virtual Machine Specification, изданной компанией Sun. Файл данного формата имеет имя, совпадающее с идентификатором класса (за исключением вложенных классов) и расширение .class.
Файл класса имеет следующую структуру:
ClassFile { }(здесь и далее u1, u2, u4 – целые числа размером 8, 16 и 32 бит с порядком байтов старший байт по младшему адресу). Рассмотрим последовательно все поля.
· magic – так называемое магическое число, имеющее в шестнадцатеричной записи вид 0xCAFEBABE;
· minor_version, major_version – версия формата файла, по ней определяется совместимость данного файла с конкретной версией JVM;
· constant_pool_count – количество элементов в Constant_pool плюс единица;
· constant_pool – область констант – массив структур переменного размера, представляющих те или иные константные значения. Обращения в область констант производятся по индексу (индексация начинается с единицы; индексы, следующие за позициями констант, представляющих числа типов long и double, не используются). Форматы констант различных видов будут рассмотрены ниже;
· access_flags – комбинация битовых флагов, определяющих права доступа и некоторые другие характеристики класса:
| Флаг | Значение | Смысл |
| ACC_PUBLIC | 0x0001 | Доступен из-за пределов пакета |
| ACC_FINAL | 0x0010 | Запрещено наследование от данного класса |
| ACC_SUPER | 0x0020 | В методах данного класса требуется использовать принятую в Java2 трактовку команды invokespecial |
| ACC_INTERFACE | 0x0200 | Интерфейс (является классом специального вида) |
| ACC_ABSTRACT | 0x0400 | Абстрактный класс |
· this_class, super_class – индексы структур в области констант, ссылающихся на данный класс и его класс-предок;
· interfaces_count – число интерфейсов, реализуемых данным классом;
· interfaces – массив индексов структур в области констант, ссылающихся на интерфейсы, реализуемые данным классом;
· fields_count – количество полей в данном классе;
· fields – массив структур field_info, описывающих поля класса. Формат структуры field_info будет рассмотрен ниже;
· methods_count – количество методов;
· methods – массив структур method_info, описы
Наверняка у вас есть товары или услуги, продажа которых приносит вам максимальную прибыль. Для быстрого старта в сети вам необходимо создание посадочной страницы (одностраничного сайта), на которой будет размещена информация о маржинальных товарах/услугах интернет магазина. За 8 лет опыта разработки конверсионных страниц мы выработали оптимальную структуру, которая позволит привлекать через landing page больше продаж. На такую структуру «одевается» ваш контент — фирменный стиль, тексты, фотографии, уникальные торговые предложения, после чего страница выходит в свет. Разработка лендинга и запуск в сети — до 7 рабочих дней. Стоит отметить, что в разработку самой посадочной страницы входит и написание копирайтером продающих текстов для вашего бизнеса, чтобы каждый посетитель страницы захотел совершить покупку именно у вас. Результат: качественно разработаная продающая посадочная страница, которая готова приносить вам новых клиентов.