2014-11-26 2 views
1

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

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

&variable 

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

+0

Аким, что произойдет, если ваша Java-программа работает на симуляции ARM/MIPS/PowerPC /? Невозможно получить адрес объекта или переменной - JVM разрешено перемещать их по желанию. –

+1

Это было бы возможно, но вы были бы зависимы от базовых архитектурных приложений или библиотек. Я не думаю, что Java должен работать на этом уровне. – KeAn

+2

Короткий ответ №. Длинный ответ да, но вам нужно использовать собственный код. JNI или JNA. –

ответ

3

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

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

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

Для получения более подробной информации о указателей и ссылок, см Pointers in Java

+0

Вы уверены, что это невозможно? например собственный метод? – Maksym

+1

@Maksym Я думаю, что «нет» как «невозможно» является правильным ответом на вопрос «Я не знаю, было бы это полезно в любом случае, но я думаю, что это было бы довольно интересно». Если OP даже не знает, что происходит внутри JVM и JIT (или AOT), тогда попытка взломать некоторые побочные эффекты вызова JNI или внутреннего состояния JVM - это не путь к «чему-то полезному» – xmojmr

+0

Я не говоря об удобстве использования этой функции ... Вопрос: «Есть ли способ доступа/изменения регистров процессора с Java» ... Мы не знаем, что делает автор, может быть, он пишет какой-то взлом для другой программы, которая использует регистр. Если вы спросите меня, я бы использовал Java для этого, я бы не ответил, но мы не можем сказать, что это невозможно. – Maksym

0

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

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

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

1

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

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