Курсовая работа: Ассемблер для платформы Java
Здесь:
· 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 – индекс строковой константы-имени поля в ConstantPool;
· descriptor_index – индекс строковой константы-дескриптора поля (описывает тип) в ConstantPool;
· attributes_count – число атрибутов поля;
· attributes – атрибуты поля. К полям могут быть применены стандартные атрибуты Deprecated (см. выше), Synthetic (поле создано компилятором и не объявлено явно в исходном тексте) и ConstantValue (инициализирующее значение для статического поля).
Формат структуры method_info
Структура method_info имеет следующий формат:
}Здесь:
· 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; }Здесь:
· attribute_name_index, attribute_length – стандартные для любого атрибута поля, описывающие его тип и размер;
· max_stack – предельный размер стека операндов для метода;
· max_locals – предельное количество локальных переменных метода (включая формальные параметры);
· code_length – размер байт-кода метода в байтах;
· code – собственно говоря, байт-код;
· exception_table_length – количество защищенных блоков;
· exception_table – таблица защищенных блоков (обработчиков исключений). Каждая ее запись имеет следующие поля:
o start_pc – индекс начала защищенного блока в массиве байт-кода,
o end_pc – индекс конца защищенного блока,
o handler_pc – индекс начала обработчика,
o catch_type – тип обрабатываемого исключения (индекс в ConstantPool) или 0 для блока try ... finally;
· attributes_count – числоатрибутов;
· attributes – атрибуты кода метода. Могут использоваться стандартные атрибуты LineNumberTable и LocalVariableTable, содержащие отладочную информацию.