JNIEXPORT jbyteArray JNICALL Java_ramRead_MainClass_readRam
(JNIEnv *env, jobject, jobject len, jobject addr, jint pid)
{
jclass c = (*env).GetObjectClass(len);
jfieldID fid = (*env).GetFieldID(c, "len", "Ljava/math/BigInteger;");
std::cout << "Object Field: " << (*env).GetObjectField(len, fid);
struct iovec local[1];
struct iovec remote[1];
unsigned long long len1 = (*env).GetObjectField(len, fid) //This did not work out. the conversion to unsigned long long
jbyte buf[len];
jbyteArray buf1 = (*env).NewByteArray(len);
local[0].iov_base = buf;
local[0].iov_len = len;
remote[0].iov_base = (void *) addr;
remote[0].iov_len = len;
nread = process_vm_readv(pid, local, 1, remote, 1, 0);
(*env).SetByteArrayRegion(buf1, 0, len, buf);
return buf1;
}
这是我的本地方法,正如您所看到的,它接收3个参数作为参数,其中两个是
jobject
和一个是int
。这两个jobjects是大整数,最初它作为参数接收了两个int
和一个long
,但是由于现在我需要传递大整数,所以我有一个问题,或者应该说有几个问题。目标:
我需要从
jobject len
获取BigInteger
值,然后使用它来初始化jbyte buf[len]
、jbyteArray buf1=(*env).NewByteArray(len)
和local[0].iov_len=len;
的大小。当然,我不能只用len
来初始化它们,我需要从len
中获取大整数值,然后用它来初始化大小。
然后我需要做同样的事情,从jobject addr中提取大整数值。任何帮助都将不胜感激。
BigInteger
的意义何在。为什么不直接传递 Java 的long
呢? - Jorn Vernee