1
嗯,我有在C以下代碼++的Java JNA取消引用指針
uintptr_t buf;
if ((reason = vm_read(task, (uintptr_t) &start, sizeof(int), &buf, &bytesRead)) != KERN_SUCCESS) {
cout << "Failed to read: " << reason << endl;
}
cout << "Step 2 (after write, should = 100): " << (*(int *) buf) << endl;
如果它打印在步驟2中,我DEREF的BUF指針,並轉換成它的int值。
我想知道如何使用JNA在Java中執行此操作?
我試過以下,但它不打印正確的值。
IntByReference o = new IntByReference();
MemoryBuffer buffer = Cacheable.buffer(4);
System.out.println(mac.vm_read(process.task(), new Pointer(140734594927432L), 4, buffer, o));
System.out.println(Pointer.nativeValue(buffer));
你真的應該使用'Memory'和明確分配您需要的緩衝區大小。使用'PointerByReference'可以爲你提供一個指針大小的緩衝區。 – technomage
當使用「Memory」類給我錯誤的價值,就像我原來的問題。它返回'551456768(每次不同)'而不是實際值。使用'PointerByReference'修復了這個問題。 –
顯示你的工作,並指出你的期望和錯誤,這將更容易準確地確定你錯誤的位置。 'PointerByReference'只是將特定的語義包裝在一個'Memory'緩衝區的周圍,所以說'Memory'失敗了,因爲'PointerByReference'工作不足。 – technomage