【问题标题】:Is there a way to enable "native method prefix" capabilities in a java language (non-native) JVM agent?有没有办法在 Java 语言(非本机)JVM 代理中启用“本机方法前缀”功能?
【发布时间】:2019-02-24 21:53:29
【问题描述】:

背景:java 有一种检测本机方法的机制,基本上允许您使用设置的前缀重命名本机方法,然后以字节码创建一个委托给它的方法。

默认情况下这是不允许的。调用Instrumentation.setNativePrefix()InstrumentationImpl.mEnvironmentSupportsNativeMethodPrefix 进行检查,我在jvm C 代码中看到默认为“false”。

我看到可能有一种方法可以通过 JVMTI 使用本机代理启用它,但我找不到任何关于使用 java 语言代理启用它的方法。

【问题讨论】:

    标签: java jvm instrumentation jvmti


    【解决方案1】:

    Java 代理所需的功能由其 jar 文件的清单属性确定,如 the bottom of the package documentation 中指定的那样:

    清单属性

    为代理 JAR 文件定义了以下清单属性:

    • 可以设置本机方法前缀
      布尔值(truefalse,大小写无关)。是否能够设置此代理所需的本机方法前缀。 true 以外的值被视为false。该属性是可选的,默认为false

    我没有专门尝试使用本机方法前缀,但我从其他功能(重新定义和重新转换)知道,它们仅在之前通过清单属性请求时报告为受 Instrumentation 接口支持。如果没有任何启动时代理请求该功能,甚至可能导致稍后通过 Attach API 加载的代理无法请求该功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多