Рефераты. Ассемблер для платформы 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 {
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 {
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 _ 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 © Все права защищены
При использовании материалов активная
ссылка на источник обязательна.