Для чего нужны коды операций const-class и const-method-type?Какой код Java генерирует их? - PullRequest
0 голосов
/ 18 декабря 2018

Я создаю инструмент для пост-обработки приложений dalvik.Для тестов я хочу создать код, который будет содержать каждый код операции.У меня проблемы с пониманием того, что делают коды операций const-class и const-method-type.Определения в официальной документации dalvik не проясняют проблему для меня.

const-class

Переместить ссылку на класс, указанный данным индексом, в указанный регистр.В случае, когда указанный тип является примитивным, в нем будет храниться ссылка на вырожденный класс примитивного типа.

Что такое ссылка на класс?Насколько я знаю, это не ссылка на объект.

То же самое с

const-method-type

Переместить ссылку на прототип метода, указанный вданный индекс в указанном регистре.

Насколько я понимаю, это не указатель на функцию.Указатель на функцию обрабатывается с помощью

const-method-handle

Переместить ссылку на дескриптор метода, заданный данным индексом, в указанный регистр.

Мой вопрос:

Для чего используются const-class и const-method-type?Какой код Java будет генерировать эти коды операций в Dalvik?

Возможно, стоит упомянуть, что мой опыт работы с Java довольно низок - я парень с ++ вроде.

1 Ответ

0 голосов
/ 18 декабря 2018

const-class может быть сгенерировано, когда вы ссылаетесь на свойство класса объекта.например, Class cls = MyObject.class.

Насколько я знаю, дескрипторы и типы методов не генерируются Java-кодом.Вы можете ссылаться на них, используя рефлексию, но я не думаю, что при этом будут генерироваться инструкции const-method-type или const-method-handle

Они поддерживают приведение к invoke-custom, которое в первую очередь предназначено для использования другимиязыки, которые компилируются в байт-код java и, в конечном итоге, байт-код dalvik.

...