Возможно дублирование текущего стека Java с использованием JNI - PullRequest
2 голосов
/ 04 декабря 2008

Я пытаюсь записать аргументы, переданные методу перед его вызовом, используя инструментарий байт-кода.

В настоящее время при инструментировании с использованием Java-кода мне нужно сначала вставить все аргументы в локальные объекты, а затем дважды нажать их снова (один раз для моего метода, который будет записывать, и в этом случае все примитивные типы должны быть преобразованы в их упакованные типы, и один раз для фактического вызова метода).

В идеале я хотел бы просто скопировать весь стек для количества аргументов, выдвигаемых для вызова метода. Однако инструкция dup () байт-кода jvm позволяет дублировать только самое верхнее значение стека. Возможно ли использовать JNI для дублирования всего стека за один раз?

1 Ответ

1 голос
/ 04 декабря 2008

Нет. Стек эффективно удаляется при компиляции метода. В JVM нет возможности компилировать нативный код. Таким образом, даже если вы попытаетесь напрямую манипулировать стеком, он на лету изменит формат (и будет использовать регистры).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...