Описание тега jvm-bytecode

Вопросы о формате байт-кода JVM .class или наборе инструкций.
0 ответов

Декомпилятор байт-кода Java в IntelliJIDEA для Scala

Я использую IntellijIDEA Ultimate Edition. просмотр .class файлы, скомпилированные из java Исходный код прост: я могу просто дважды щелкнуть .class файл и IDEA будет декомпилировать его. Однако с .class файлы, которые были скомпилированы из scala Ис…
29 дек '17 в 09:48
2 ответа

Почему для инструкций JVM *const_n определен только такой диапазон констант?

Согласно спецификации JVM, есть несколько инструкций, оптимизированных для работы с определенным набором констант. Кто-нибудь может объяснить, почему определяется только этот диапазон констант? iconst_n: нажмите целочисленную константу n, 0 ≤ n ≤ 5 …
24 окт '18 в 11:26
2 ответа

Как получить байт-код в виде байтового массива из класса

Учитывая произвольный Class экземпляр, в том числе тот, который генерируется во время выполнения (нет .class файл на диске), есть ли способ получить байты класса?
28 янв '16 в 20:07
0 ответов

Внутренний класс ломает завершение кода Eclipse

У меня серьезная проблема с отключением Eclipse всех дополнений кода в классе Java, который импортирует двоичный файл. Двоичный файл был скомпилирован специальным компилятором для пользовательского языка программирования на основе JVM, и код выгляди…
1 ответ

Использование "invokedynamic" - что происходит под капотом?

Фон В настоящее время я пишу JVM на C# для чисто академических целей (и, возможно, для создания смешанного приложения.NET и Java/Scala в будущем). контекст Я пишу простой класс JAVA: public class test { public static String hello_world(int i) { ret…
04 ноя '18 в 10:18
1 ответ

JVM INVOKESPECIAL частный конструктор с ASM

Я использую ASM для генерации некоторого байт-кода и динамического выполнения. Но есть случай, когда мне нужно вызвать приватный конструктор, но я не могу понять, как. Я знаю, что можно вызвать закрытое конструктор через отражение (setAccessible), н…
1 ответ

Что отличает "имя интерфейса" от "имени класса"?

В пункте 4.4.2 спецификации java 8 (аналогично в некоторых других местах) упоминается class_index Значение элемента class_index должно быть допустимым индексом в таблице constant_pool. Запись constant_pool в этом индексе должна быть структурой CONST…
26 янв '19 в 16:32
2 ответа

Что означает IF_ICMPNE?

Для следующего класса Java: public class ArtClass { public boolean foo(int x) { if(x == 3956681) return true; else if(x == 9855021) return true; else if(x == 63085561) return true; else return false; } } Его инструкции JVM: I4 Branch 1 IF_ICMPNE L3 …
29 янв '19 в 16:01
0 ответов

Как обернуть переменную методом в байт-код ASM JAVA

Я пытаюсь зашифровать переменную в параметре в вызове метода с использованием ASM при обходе инструкций в узле метода. На данный момент я попытался сделать строку для шифрования в предыдущей строке вызова метода (в фактическом коде Java). то есть. е…
1 ответ

Рассчитать размер байт-кода метода

В настоящее время я внедряю специализированный инструмент метрики программного обеспечения, используя библиотеку ASM. Единственный способ вычислить размер метода с помощью этой библиотеки - вручную увеличивать некоторую переменную размера при каждом…
12 мар '18 в 14:26
1 ответ

ASM - несовместимые кадры стековой карты в целевой ветви

Я пытаюсь сделать простой обфускатор Java байт-код, который работает, заменив GOTO инструкции с простыми условными переходами, скажем, if 10 != 15 GOTO else throw IllegalStateException, Мой текущий код: final AbstractInsnNode[] insns = method.instru…
1 ответ

Как посчитать индексы локальных переменных в MethodVariableAccess?

Согласно [1], в фрейме метода массив локальных переменных содержит ссылку на вызываемый экземпляр, параметры и, наконец, любые другие переменные, используемые в коде метода. Также, long а также double значения занимают две локальные переменные. При …
1 ответ

Java-байт-код - одна метка для каждого оператора

javac Компилятор добавляет метку номера строки к каждой инструкции, которая соответствует новой строке в исходном коде. Как следствие, когда несколько операторов перечислены в одной строке, они все попадают под одну и ту же метку строки (L1 в случае…
28 апр '18 в 15:58
1 ответ

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

В постоянном определении пула, в соответствии со спецификацией, почему требуется иметь CONSTANT_String, CONSTANT_Integer, ... в качестве отдельного и уникального тега? почему эти теги не могут рассматриваться как тег CONSTANT_Class, как и все другие…
29 июл '16 в 08:54
1 ответ

Почему в CgLib BeanCopier есть бесполезный (на мой взгляд) dup2

BeanCopier в cglib использует метод net.sf.cglib.beans.BeanCopier.Generator#generateClass, чтобы получить конкретный BeanCopier в соответствии с предложенным вами предложением. но в строке 152 файла BeanCopier.java есть бесполезный dup2, который, я …
02 янв '18 в 17:58
1 ответ

Как сгенерировать байт-код для оператора if-else

Как мне сгенерировать код, соответствующий инструкции байт-кода, ЕСЛИ ТО - ELSE с опциональной веткой ELSE? Например, программа If-else.pas считается корректной, а программа If.pas не считается корректной, поскольку она не содержит ветку ELSE. Если-…
23 май '14 в 16:20
3 ответа

Отменено, если условие в байт-коде Java

Рассмотрим простой пример private static String isPositive(int val) { if (val > 0) { return "yes"; } else { return "no"; } } Здесь все довольно просто: если val > 0 вернуть yes еще вернуться no, Но после компиляции, в байт-коде, это если услов…
02 мар '17 в 18:02
2 ответа

Понимание байт-кода, сгенерированного для простого Java-класса

Я слежу за этим блогом, чтобы изучить Java к байт-коду, и я сгенерировал байт-код для этого SimpleClass. public class SimpleClass { public int simpleF = 5; } Я понимаю позиции байт-кода, как показано ниже 0 для этого 1 для вызова конструктора суперк…
23 мар '16 в 00:32
1 ответ

Можно оптимизировать последовательность байт-кода

Я генерирую последовательность байт-кода после встроенного вызова нескольких методов. В начале встроенного я сначала вставил существующие индексы переменных в новые номера локальных переменных в случае каких-либо исключений в встроенном методе. Эта …
2 ответа

"throws" и "аннотация для исключения" в байт-коде Dalvik

Почему байт-код генерируется как .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/FileNotFoundException; } .end annotation скорее, чем .throws Ljava/io/FileNotFoundException если метод объявляет throws FileNotFoundException в шапке в…