当前位置: 首页 > 知识库问答 >
问题:

JVMTI在附加时获得本地变量访问能力

扈沛
2023-03-14

我正在使用JVMTI库编写一个本地java代理,并试图获得访问本地变量的能力。当在OnLoad阶段加载代理时,可以启用该功能,但当在live阶段加载代理时(OnAttach)似乎不可能,并且当我试图添加代理时,会得到错误-jvmti_error_absent_information。

JNIEXPORT
jint
JNICALL
Agent_OnAttach(
    JavaVM *jvm,
    char *options,
    void *reserved
    )
{
    jvmtiEnv *jvmti;
    jvmtiCapabilities PotentialCap, RequestedCap;
    jvmtiError error;

    memset(&RequestedCap, 0, sizeof(RequestedCap));

    jvm->GetEnv((PVOID*)&jvmti, JVMTI_VERSION_1_0);
    jvmti->GetPotentialCapabilities(&PotentialCap);

    RequestedCap.can_access_local_variables = 1;

    error = jvmti->AddCapabilities(&RequestedCap);

    if (error != JVMTI_ERROR_NONE)
    {
        MessageBox(
            NULL,
            L"Fail to request local variable access",
            L"Native Agent",
            NULL);
    }

    return JNI_OK;
}

有没有办法在实时阶段启用局部变量访问?

谢谢

共有1个答案

曾枫
2023-03-14

在HotSpot中,JVM在实时阶段不可能添加访问本地变量的功能,只能在加载阶段(正如您在问题中所观察到的)。

您可以在这里看到这一点(它在init_onload_capabilites中启用,而不是init_always_capabilites)。

 类似资料:
  • 问题内容: Go 1.7 beta 1今天早上发布,这是Go 1.7的发行说明草案 。新功能已添加到程序包中。的文档给出了一个示例: 的文档还给出了以下解释: 例如,如果p指向包含文件描述符d的结构,并且p具有关闭该文件描述符的终结器,并且函数中对p的最后使用是对syscall的调用。Write(pd,buf,size ),则一旦程序进入syscall.Write,p可能无法访问。终结器可能会在此

  • 我正在尝试理解下面的QuickSort实现在Java中是如何工作的。我已经了解了大部分,但我很困惑它是如何做任何事情的。当您将变量传递给函数并对其进行修改时,它通常不会修改传入的原始变量。那么为什么这种没有返回类型的快速排序实现会修改传入的数组呢?

  • 所以,我有一个类a,它有一个(公共静态WebElement1,element2)。 然后我有一个测试类,它有一个叫做@test public void testclassa的方法。 问题是我正在获取org.openqa.selenium.NosuChelementException:无法定位元素:{}错误。我认为我的错误正在发生,因为element2位于下一页,它在单击按钮后显示。我应该在代码中做

  • 我正在使用javafx编写一个小型棋盘游戏,我已经为棋盘上的每个“单元格”创建了一个网格。 但是,在按下单元格按钮时,我在更改单元格颜色时遇到了一些问题。 下面是我得到的一个错误:“Error:(44,43) java:从内部类引用的局部变量必须是final或有效的final” 但是,我不能将变量设为final——因为变量是for循环的一部分,如下所示: 这里真正的问题是,我需要向作为按钮数组一部

  • 获取访问攻击是网络渗透测试的第二部分。 在本节中,我们将连接到网络,这将使我们能够发起更强大的攻击并获得更准确的信息。 如果网络不使用加密,我们可以连接到它并嗅出未加密的数据。 如果网络是有线的,我们可以使用电缆并连接到它,可能通过更改我们的MAC地址。唯一的问题是攻击目标使用加密,如WEP,WPA,WPA2。 如果我们确实遇到加密数据,我们需要知道解密它的密钥,这在本章将会学习和实践。 如果网络

  • 问题内容: 在Java 8之前,我们无法在本地类中使用非最终变量。但是现在,它们允许final以及有效的final(其值未更改)可以被本地类引用。我所知道的(如果我错了,请纠正我),他们不支持引用非最终值,因为那里的值可以更改。因此,他们现在如何支持它,以及为什么以前不支持它。 问题答案: 实际上,情况根本没有改变。编译器稍微聪明一点,不再强迫您使用final关键字。 如果它检测到的变量是 有效的