【发布时间】:2021-04-14 02:08:24
【问题描述】:
我正在将使用 ctypes 的 Python 脚本移植到 Java。
脚本的一部分将数据从 DLL 的虚拟内存复制到缓冲区,该缓冲区存储所述数据以便稍后复制回来。我不确定如何在 JNA 中完成此操作。
我确实有存储我想要的数据的虚拟地址的确切值,但我不确定如何获取指向这些虚拟地址的指针,因为 JNA 的 Javadoc 从未指定指针是否与系统相关内存或 DLL 内存。
如何在 Java 中设置一个指向指定(虚拟)内存地址的指针?在 Python 中,可以使用dll._handle + address 设置正确的值。
【问题讨论】:
-
只是一个旁注,但我注意到
handle存在某个私有字段NativeLibrary。我不确定这是否是我要找的地址,但我认为是。 -
加载后可以从库的
toString()中提取handle的值。 -
会指向基址吗?我发现这比通过 Windows API 更方便。
-
它将指向 DLL 的基地址。但是,我不能保证 DLL 会被加载到连续的内存中。使用风险自负!
-
似乎当我设置一个指针指向正确的地址并尝试写入它时,JNA 给了我一个无效的内存访问错误。这就是 JNA 的工作原理吗?