Есть ли способ включить возможности "собственного префикса метода" в агенте JVM на языке Java (не нативном)? - PullRequest
0 голосов
/ 20 сентября 2018

background: java имеет механизм для инструментирования собственных методов, в основном позволяя вам переименовать собственный метод с установленным префиксом и затем создать метод, который делегирует ему, в байт-код.

По умолчанию это выглядитзапрещено.Вызов Instrumentation.setNativePrefix() выполняет проверку на InstrumentationImpl.mEnvironmentSupportsNativeMethodPrefix, который, как я вижу в коде jvm C, по умолчанию равен "false".

Я вижу, что, возможно, есть способ включить его с собственным агентом через JVMTI, ноЯ не могу найти ничего о том, чтобы включить его с помощью агента на языке Java.

1 Ответ

0 голосов
/ 20 сентября 2018

Необходимые возможности для агента Java определяются Атрибутами манифеста его файла JAR, как указано в нижней части документации пакета :

Атрибуты манифеста

Следующие атрибуты манифеста определены для файла JAR агента:

  • Can-Set-Native-Method-Prefix
    Boolean (true илиfalse, регистр не имеет значения).Возможность установить префикс собственного метода, необходимый этому агенту.Значения, отличные от true, считаются false.Этот атрибут является необязательным, по умолчанию это false.

Я не пробовал его специально с префиксом нативного метода, но я знаю из других возможностей (переопределение и ретрансформация), чтоони сообщаются как поддерживаемые интерфейсом Instrumentation только при предварительном запросе через атрибуты манифеста.Отсутствие какого-либо агента времени запуска, запрашивающего функцию, может даже сделать невозможным запрос функции в дальнейшем агентом, загруженным через API присоединения.

...