Машинный код Java программы

103
30 июня 2021, 10:20

Мне надо

  1. Получить машинный код, генерируемый в итоге всего пути прохождения моей Java программы в виде файла, которую можно скажем открыть через блокнот и там увидеть чисто бинарный код.
  2. Увидеть сгенерированный байт-код, который еще не прошел обработку через JVM в виде файла, который при открытии скажем через блокнот, покажет тот код, который передается JVM, если это код ассемблера, то увидеть в виде обычного кода ассемблера, если опять таки бинарный код - то увидеть в бинарном виде, а не в том непонятном виде, в котором обычно можно увидеть .class при просмотре через блокнот, уж явно код на самом деле не имеет тот вид, каким обычно показывает блокнот, а мне надо увидеть чисто тот вид кода, который передается JVM -у.

Прошу помочь.

ВАЖНО! У меня нет задачи создать .exe или другие файлы, мне просто тупо надо получить возможность увидеть желанные коды в их правильном виде.

Желательно:

вид бинарного кода компилятора javac и бинарного кода, который уже через JVM выполняется уже компьютером - в виде файла желательно txt для исправного открытия в блокноте в таком

или в таком

виде.

Answer 1

Не представляю зачем вам это, но увидеть бинарное представление байткода можно так

public class App {
    private static final int SCREEN_WIDTH = 10;
    public static void main(String[] args) {
        try (InputStream is = new FileInputStream("SomeClass.class")) {
            int b, c = 0;
            while ((b = is.read()) != -1) {
                String s = String.format("%8s", Integer.toBinaryString(b & 0xFF)).replace(' ', '0');
                System.out.print(s + " ");
                if (c > SCREEN_WIDTH) {
                    System.out.println();
                    c = 0;
                } else {
                    c++;
                }
            }
        } catch (IOException exc) {
            exc.printStackTrace();
        }
    }
}

Только нужно учесть, что оно включает не только код, но и все метаданные без разбора.

А увидеть в таком виде машинный код, генерируемый JIT-компилятором вы не сможете.

READ ALSO
В цикле запись HashMap строк из Сканера

В цикле запись HashMap строк из Сканера

Сделать в цикле запись в HashMap строк из Сканера, пока пользователь не введет qКлючем записи будет текущая дата, значение - текст из сканера

128
Блокировка выхода из приложения

Блокировка выхода из приложения

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

114
Почему не работают сокеты? (Android)

Почему не работают сокеты? (Android)

При попытке создания сокета:

88
Узнать все доступные раскладки (языки) пользователя

Узнать все доступные раскладки (языки) пользователя

Есть способ узнать текущий язык системы пользователя через Locale, существует ли способ узнать все доступные раскладки (языки)? Пример для наглядности,...

82