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;
}
これは私のネイティブメソッドであり、あなたが見ることができるように、それは引数2 jobject
と1 int
として3つのパラメータを受け取りにjオブジェクトの値にアクセスする方法。 2つのjobjectsは大きな整数です 元はパラメータとして復活しましたint
と1つはlong
ですが、今は大きな整数を渡す必要があるため、問題があります。JNI
目標:私はjobject len
からBigInteger
値を取得する必要があり、その後、私は私が取得する必要があり、私はもちろん、単にlen
でそれらを初期化できないjbyte buf[len]
、jbyteArray buf1 = (*env).NewByteArray(len)
とlocal[0].iov_len = len;
のサイズを初期化するためにそれを使用する必要があります
大きな整数値をlen
から取得し、それを使ってサイズを初期化します。 それから、大きな整数値を抽出するjobject addrを使って同じことをする必要があります。
ご協力いただければ幸いです。
'BigInteger'をここで' unsigned long long'に変換しているのであれば、ここでそれを使用する点はありません。なぜJavaのlong型を渡すだけではないのですか? –
さて、私は長い間変換しようとしましたが、動作しませんでした。なぜBigIntegerですか?これは16進数の例です。ffffffffff601000 – ChronicUser