【问题标题】:Read memory from own process in Java在Java中从自己的进程中读取内存
【发布时间】:2011-07-27 12:52:10
【问题描述】:

我目前正在参加一门课程,我们必须编写一个 AI 来玩战舰,我们设法推出了一个很棒的工作,但是我们的老师很聪明,我想制作一个作弊的 AI,那个读取内存并查看对手 AI 放置船只的位置。

UI 在一个单独的线程中运行,它在主线程的逻辑上运行observer pattern。船的位置存储在一个二进制二维数组中,其中 true 表示船上的一个点(不是哪个,只是任何一艘船)。

现在的问题是:在同一个进程和同一个线程中运行时,是否有可能以某种方式读取enemyBoard的二维数组的内存?

【问题讨论】:

    标签: java memory artificial-intelligence


    【解决方案1】:

    如果它在同一个进程中并且您的类与驱动程序有任何类型的链接(因此间接到另一个数组),您可以仅使用反射 API 来获取它。

    【讨论】:

      【解决方案2】:

      这样做的一种方法是调用一段本机 C/C++ 代码,该代码使用 JNI 接口从堆中复制数组内容。 JNI 提供了许多方法来读取/复制和操作堆上的对象。 official documentation 是一个很好的起点。

      【讨论】:

        【解决方案3】:

        只有深入了解本机代码,才能直接访问内存。所以,我想,唯一的方法就是调用 JNI。

        【讨论】:

          【解决方案4】:

          在 Java 中,您无法像在 C/C++ 中那样对内存进行原始访问。因此,您可以尝试使用 JNI 来获取原始内存。

          另一种选择可能是使用反射。如果您的代码引用了具有对手位置的任何对象,那么您可以访问它的字段,甚至是私有字段。

          【讨论】:

            猜你喜欢
            • 2016-09-19
            • 2013-08-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-02-02
            • 2015-12-22
            相关资源
            最近更新 更多