Рефераты. Ассемблер для платформы Java

·        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];

                   }

        

         Здесь:

·        access_flags - комбинация битовых флагов, определяющих права доступа и некоторые другие характерист       ики поля:

Имя флага

Значение

Смысл

ACC_PUBLIC

0x0001

Поле объявлено как public

ACC_PRIVATE

0x0002

Поле объявлено как private

ACC_PROTECTED

0x0004

Поле объявлено как protected

ACC_STATIC

0x0008

Поле является статическим

ACC_FINAL

0x0010

Поле объявлено как final и не может быть изменено после начальной инициализации

ACC_VOLATILE

0x0040

Поле объявлено как volatile

ACC_TRANSIENT

0x0080

Поле объявлено как transient – не сохранятся при сериализации

·        name_index – индекс строковой константы-имени поля в Constant Pool;

·        descriptor_index – индекс строковой константы-дескриптора поля (описывает тип) в Constant Pool;

·        attributes_count – число атрибутов поля;

·        attributes – атрибуты поля. К полям могут быть применены стандартные атрибуты Deprecated (см. выше), Synthetic (поле создано компилятором и не объявлено явно в исходном тексте) и ConstantValue (инициализирующее значение для статического поля).

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

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


    method_info {

               u2 access_flags;

               u2 name_index;

               u2 descriptor_index;

               u2 attributes_count;

               attribute_info attributes[attributes_count];

               }

 

Здесь:

·        access_flags – битовые флаги, определяющие права доступа и некоторые дополнительные свойства метода:


Flag Name

Value

Interpretation

ACC_PUBLIC

0x0001

Метод объявлен как public

ACC_PRIVATE

0x0002

Метод объявлен как private

ACC_PROTECTED

0x0004

Метод объявлен как protected

ACC_STATIC

0x0008

Метод является статическим

ACC_FINAL

0x0010

Метод является финальным и не может быть замещен

ACC_SYNCHRONIZED

0x0020

Метод объявлен как synchronized

ACC_NATIVE

0x0100

Метод является «родным» и содержит код, непосредственно выполняющийся физическим процессором

ACC_ABSTRACT

0x0400

Метод является абстрактным

ACC_STRICT

0x0800

Устанавливает «строгий» режим работы с вещественными числами (только в Java 2).


·        name_index, descriptor_index, attributes_count – аналогично field_info;

·        attributes – атрибуты метода. Методы могут иметь следующие стандартные атрибуты:

o                               Deprecated, Synthetic – аналогично соответствующим атрибутам полей;

o                               Exceptions – описание исключений, которые может генерировать метод. Нужно отметить, что обязательное описание исключений не является необходимым требованием для корректного выполнения;

o                               Code – собственно говоря, байт-код метода.


Формат атрибута Code.


Атрибут Code имеет следующую структуру:

Code_attribute {

               u2 attribute_name_index;

               u4 attribute_length;

               u2 max_stack;

               u2 max_locals;

               u4 code_length;

               u1 code[code_length];

               u2 exception_table_length;

               {           u2 start_pc;

                           u2 end_pc;

                           u2  handler_pc;

                           u2  catch_type;

               }           exception_table[exception_table_length];

               u2 attributes_count;

               attribute_info attributes[attributes_count];

    }

 

Здесь:

·        attribute_name_index, attribute_length – стандартные для любого атрибута поля, описывающие его тип и размер;

·        max_stack – предельный размер стека операндов для метода;

·        max_locals – предельное количество локальных переменных метода (включая формальные параметры);

·        code_length – размер байт-кода метода в байтах;

·        code – собственно говоря, байт-код;

·        exception_table_length – количество защищенных блоков;

·        exception_table – таблица защищенных блоков (обработчиков исключений). Каждая ее запись имеет следующие поля:

Страницы: 1, 2, 3, 4, 5, 6, 7



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.