Antecedentes: Java tiene un mecanismo para instrumentar métodos nativos, básicamente, lo que le permite cambiar el nombre del método nativo con un prefijo de set y luego crear un método que los delegados a que, en el código de bytes.
Que aparece de forma predeterminada este será anulado. Llamando Instrumentation.setNativePrefix()
lleva a cabo un control sobre InstrumentationImpl.mEnvironmentSupportsNativeMethodPrefix
, lo que veo en los valores por defecto de código JVM C a "falso".
Veo que hay posiblemente una manera que le permita con un agente nativo a través de JVMTI, pero no puedo encontrar nada de lo que le permite con un agente de lenguaje Java.
Las capacidades requeridas para un agente de Java son determinadas por los atributos manifiestos de su archivo jar, como se especifica en la parte inferior de la documentación del paquete :
Los atributos se manifiestan
Los siguientes atributos se manifiestan están definidos para un archivo JAR agente:
...
- Can-Set-Nativo-Método-Prefijo
Boolean (true
ofalse
, casos irrelevante). Es la capacidad de establecer el método de prefijo nativa necesaria para dicho agente. Otros valores quetrue
se consideranfalse
. Este atributo es opcional, el valor por defecto esfalse
.
Yo no lo probamos específicamente con el prefijo método nativo, pero sé de las otras capacidades (redefinición y retransformación) los cuales se presenten sólo como el apoyo de la Instrumentation
interfaz cuando solicitado anteriormente a través de los atributos de manifiesto. La ausencia de cualquier agente que solicita el tiempo de inicio de la función puede incluso hacer que sea imposible para solicitar la función de tarde-en por un agente cargado a través de la API Adjuntar.