Курсовая работа: Ассемблер для платформы Java

· 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, описывающих методы класса. Формат структуры mettho_info будет рассмотрен ниже. Конструкторы и статические инициализаторы представляются методами со специальными именами <init> и <clinit>;

· attributes_count – количество атрибутов класса;

· attributes – массив структур-атрибутов класса (поля, методы и байт-код методов также могут иметь свои атрибуты). Каждая такая структура в начале имеет два обязательных поля, описывающих тип атрибута и его размер. К классу могут быть применены следующие стандартные атрибуты: SourceFile – указывает на файл исходного текста, из которого был получен данный файл класса, и Deprecated – класс оставлен для совместимости со старым кодом и его использование не рекомендуется. Возможно создание атрибутов нестандартных типов, но они будут игнорироваться средой выполнения.

Типы элементов Constant_pool

Каждый элемент сonstant_pool начинается с однобайтного поля, определяющего его тип. Размер и содержание остальной части структуры зависит от типа. Существуют следующие типы констант (элементов constant_pool):

· CONSTANT_Class – указываетнакласс. Содержит индекс константы типа CONSTANT_Utf8, хранящей дескриптор класса;

· CONSTANT _Fieldref – указывает на поле класса. Содержитиндексыконстанттипа CONSTANT_Class и CONSTANT_NameAndType;

· CONSTANT _Methodref указывает на метод класса (не интерфейса). Содержитиндексыконстанттипа CONSTANT_Class и CONSTANT_NameAndType;

· CONSTANT _InterfaceMethodref указываетнаметодинтерфейса. Содержитиндексыконстанттипа CONSTANT_Class и CONSTANT_NameAndType;

· CONSTANT_String – указывает на строку, содержит индекс константы типа CONSTANT_Utf8;

· CONSTANT_Integer – содержит целое 32-разрядное число;

· CONSTANT_Float – содержит вещественное число одинарной точности;

· CONSTANT_Long – содержит целое 64-разрядное число;

· CONSTANT_Double – содержит вещественное число двойной точности;

· CONSTANT_NameAndType – описывает сигнатуру и имя метода либо тип и имя поля. Содержит индексы двух констант типа CONSTANT_Utf8, хранящих соответственно имя и дескриптор типа (сигнатуры);

· CONSTANT_Utf8 – содержит строку в формате Utf8 (символы Unicode представляются комбинациями от 1 до 3-х байт, причем символы с кодами, не превышающими 127, представляются одним байтом).

Дескрипторы – это строки, описывающие типы и сигнатуры методов в компактном формате. Примитивные типы обозначаются одной буквой, типы массивов – открывающими квадратными скобками в количестве, равном размерности массива, перед обозначением базового типа. Классы описываются строкой, содержащей имя класса с полным путем, при этом вместо точки роль разделителя имен пакетов и класса выполняет слэш. В дескрипторах сигнатур методов в круглых скобках без разделителей перечисляются дескрипторы типов параметров; после закрывающей скобки находится дескриптор типа возвращаемого значения. Для устранения неоднозначностей при этом перед дескрипторами классов записывается буква L, а после них – точка с запятой. Например, (ILjava/lang/Object;)I – (int, Object):int (буквой I обозначается тип int).

Формат структуры field_info

Структура field_info имеет следующий формат:

field_info {

u2 access_flags;

u2 name_index;

u2 descriptor_index;

u2 attributes_count;

attribute_info attributes[attributes_count];

К-во Просмотров: 402
Бесплатно скачать Курсовая работа: Ассемблер для платформы Java