Доступ к регистрам процессора

1

Есть ли способ доступа/изменения регистров процессора с Java, как в Assembly? (eax, rip, ax и т.д.) Я не знаю, было бы это полезно, но я думаю, что это было бы очень интересно.

И есть ли способ получить "точку сохранения" переменных, как в c/c++:

&variable

Заранее спасибо, надеюсь, вы поняли, что я имею в виду.

  • 0
    Аким, что произойдет, если ваша Java-программа будет работать на ARM / MIPS / PowerPC / программной симуляции? Невозможно получить адрес объекта или переменной - JVM может перемещать их по своему желанию.
  • 1
    Это было бы возможно, но вы зависели бы от базовых архитектурных приложений или библиотек. Я не думаю, что Java предназначена для работы на этом уровне.
Показать ещё 2 комментария
Теги:
assembly
cpu
cpu-registers

3 ответа

3
Лучший ответ

Короткий ответ: Нет

Java компилируется в байтовом коде с перекрестной таблицей. Сборка имеет специфическую форму.

Что касается "точки сохранения", они называются указателями в c/c++, а на Java вы манипулируете ссылками.

Дополнительные сведения о указателях и ссылках см. В статье Указатели в Java

  • 0
    Вы уверены, что это невозможно? например нативный метод?
  • 1
    @Maksym Я думаю, что «нет» как «невозможно» - это правильный ответ на вопрос « Я не знаю, будет ли это полезно каким-либо образом, но я думаю, что это будет довольно интересно ». Если OP даже не знает, что происходит внутри JVM и JIT (или AOT), то попытка взломать некоторые побочные эффекты вызова JNI или внутреннего состояния JVM не является способом достижения «чего-то полезного».
Показать ещё 2 комментария
1

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

Вы также не можете определить адрес памяти объекта только с помощью java. Также потому, что программа находится в указанной виртуальной машине. Вы можете получить позицию внутри памяти JVM Heap.

0

Вы не должны этого делать. Java - это язык высокого уровня и может обрабатывать вашу задачу без необходимости использования регистра cpu. На самом деле JVM может использовать регистр cpu, если он понадобится для оптимизации.

Вы можете защитить использование кэша CPU волатильным.

В любом случае вы можете попытаться написать собственный собственный метод, не уверенный, что он будет успешным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню