Bra*_*don 7 c++ java java-native-interface jvm
有没有办法连接到已经运行的JVM?
例如,在JNI中,您可以使用JNI_CreateJavaVM创建VM并运行jar并检查其所有类.
但是,如果jar已经运行,我找不到附加到其JVM并与其类通信或获取其env指针的方法.
另一个问题是,如果jar加载我的本机库(.dll)并且我想在.dll中创建一个JVM,我不能..也不能在没有jar调用我的函数的情况下附加jar的当前JVM.
Java端的示例:
class Foo
{
static {loadLibrary("Foo")}
}
Run Code Online (Sandbox Code Playgroud)
在C++方面:
void Foo()
{
//CreateJVM
//Attach to the current process..
//Call function from the jar that loaded me.
}
Run Code Online (Sandbox Code Playgroud)
如果没有先调用jar,就无法做到这一点Foo.
有任何想法吗?有没有办法获取当前的JVM或附加到它或外部的jvm实例?
man*_*ell 15
是的你可以.
1) 在托管JVM的进程中注入DLL(例如java.exe,或javaw.exe,或iexplore.exe).常见的注入技术是使用SetWindowsHookEx
2)在DLL,获得的模块句柄jvm.dll使用GetModuleHandle
3)使用获取JNI_GetCreatedJavaVMs函数的地址GetProcAddress
4)调用函数,如果成功,则使用结构中的AttachCurrentThread函数指针将线程附加到找到的第一个JVM JavaVM.
5)完成.
有用链接:Invocation API
| 归档时间: |
|
| 查看次数: |
5084 次 |
| 最近记录: |