【发布时间】:2015-04-30 14:14:35
【问题描述】:
在 Android 中,当我们通过 JNI 调用原生代码时,它会破坏 Dalvik VM 以及在其中运行的 Java 代码吗?
例如,假设我们有这个 C 方法并且我们通过 JNI 调用它:
JNIEXPORT void JNICALL Java_MemoryCorruptor_corruptMemory()
{
while (1) {
char *p = randomAddress();
*p = randomChar();
}
}
如果 VM 只加载 .so 文件,并且本机代码与 VM 在相同的上下文/地址空间中运行,那么我认为 VM 可能会损坏。
另一方面,如果 VM 创建一个子进程来保存 .so 文件并使用某种形式的 IPC 来调用方法,则 Java 代码不会被本机代码破坏。
【问题讨论】:
标签: android android-ndk dalvik memory-corruption