如何使用 JNA Pointer 将数据写入内存?
How to write data in memory using JNA Pointer?
我有一个指向内存的指针,例如:
Pointer pData = new Memory(65536);
并且我需要从位置 8 开始获取该内存的指针,因为我想将内存的那部分(从 8 到 65535)发送到本机 C API。
我用过:
pData8 = pData.getPointer(8);
获取从位置 8 开始的指针,然后我尝试使用以下方法向 pData8 写入内容:
pData8.setInt(0xAAAA);
只是为了验证我在正确的位置写入但我得到错误:无效的内存访问。
如何获得指向内存部分的有效指针并能够在上面写入?
详情如下:
80 Pointer pM = new Memory(65536);
81 Pointer p = pM.getPointer(4);
82 pM.setInt(0, 0xFFFF);
83 p.setInt(0, 0xBBBB);
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.setInt(Native Method)
at com.sun.jna.Pointer.setInt(Pointer.java:1124)
at it.caen.dig.Demo.main(Demo.java:83)
看来你用错了API。 getPointer
returns 在该偏移处找到的值作为指针(可能指向任何地方)。如果您想获得指向该偏移量的指针,请使用 share
:
Provide a view of this memory using the given offset to calculate a new base address.
Pointer pM = new Memory(65536);
Pointer p = pM.share(4);
pM.setInt(0, 0xFFFF);
p.setInt(0, 0xBBBB);
我有一个指向内存的指针,例如:
Pointer pData = new Memory(65536);
并且我需要从位置 8 开始获取该内存的指针,因为我想将内存的那部分(从 8 到 65535)发送到本机 C API。
我用过:
pData8 = pData.getPointer(8);
获取从位置 8 开始的指针,然后我尝试使用以下方法向 pData8 写入内容:
pData8.setInt(0xAAAA);
只是为了验证我在正确的位置写入但我得到错误:无效的内存访问。
如何获得指向内存部分的有效指针并能够在上面写入?
详情如下:
80 Pointer pM = new Memory(65536);
81 Pointer p = pM.getPointer(4);
82 pM.setInt(0, 0xFFFF);
83 p.setInt(0, 0xBBBB);
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.setInt(Native Method)
at com.sun.jna.Pointer.setInt(Pointer.java:1124)
at it.caen.dig.Demo.main(Demo.java:83)
看来你用错了API。 getPointer
returns 在该偏移处找到的值作为指针(可能指向任何地方)。如果您想获得指向该偏移量的指针,请使用 share
:
Provide a view of this memory using the given offset to calculate a new base address.
Pointer pM = new Memory(65536);
Pointer p = pM.share(4);
pM.setInt(0, 0xFFFF);
p.setInt(0, 0xBBBB);