使用JNI读取具有偏移量的内存

时间:2013-03-01 21:12:57

标签: java c++ memory java-native-interface offset

我正在尝试制作一个可以轻松适应各种游戏的自定义系统,以便在HP达到某个标记时修复角色。这将是有用的方式,它允许用户使用魔药或治疗咒语治愈自己,只要他们有死亡的危险。到目前为止,我已经用天际测试了它,并且我已经让它工作得相当好但是我想让这个游戏适用于java代码而不是Visual Basic。所以基本上我只需要帮助将我的VB代码的一小部分转换为Java代码。另外我希望我必须使用JNI但是没有那么多JNI,所以请不要直接指向api。

    DWORD HpPointer = 0x007C5710; //example pointer
DWORD HpPointed;
WORD HpOffset = 0x07B4; //example offset
int CurrentHp = 0;      //variable that stores the integer value returned

ReadProcessMemory(hProc,(LPCVOID)(HpPointer), &HpPointed, 4, NULL);
ReadProcessMemory(hProc,(LPCVOID)(HpPointed+HpOffset), &CurrentHp, 4, NULL);
//end of hp section
return (CurrentHp);

谢谢

1 个答案:

答案 0 :(得分:1)

您需要使用以下内容:

public class Game {

    public native byte[] readMemory(int offset);

}

你要用

javah Game

创建标题

然后你将创建你的C ++类并在程序中包含标题

要加载Game类,您需要使用System.loadLibrary()或使用-D命令行参数。注意:System.loadLibrary取决于您运行的操作系统。因此,如果您在Windows下编译它将是一个.dll文件。因为linux将是一个.so而对于mac来说它将是一个.jnilib扩展