【问题标题】:Java JNA writing memory booleanJava JNA 写入内存布尔值
【发布时间】:2015-12-15 13:16:58
【问题描述】:

我正在破解一个游戏,我正在使用 Java JNA 将内存写入游戏,我只能写入字节数组,但我也需要写入 booleans(如果这有意义的话)。所以这是我的写方法

VKernel32.java

public abstract boolean WriteProcessMemory(Pointer paramPointer1, long paramLong, Pointer paramPointer2, int paramInt, IntByReference paramIntByReference);

实际记忆写作:

public void writeMemory(int address, byte[] data) {
    int size = data.length;

    Memory toWrite = new Memory(size);

    for (int i = 0; i < size; i++) {
        toWrite.setByte(i, data[i]);
    }    
    kernel32.WriteProcessMemory(process, address, toWrite, size, null);
}

在 C++ 中,我可以使用模板 for-say 来做这样的事情

template <class T>
void Write(DWORD addr, T val) {
    WriteProcessMemory(_process, (LPVOID)addr, &val, sizeof(T), NULL);
}

【问题讨论】:

    标签: java jna


    【解决方案1】:

    内存由字节组成。如果您想编写更“高级”的东西(例如布尔值),您需要考虑如何将其表示为字节并以这种方式对其进行编码。如果您正在破解游戏,那么您在此处的设计选择仅限于游戏认为布尔值在内存中应该是什么样子。

    【讨论】:

    • 是的,在 C++ 中,我可以使用模板 for-say 来执行类似此模板的操作 void Write(DWORD addr, T val) { WriteProcessMemory(_process, (LPVOID)addr, &val , sizeof(T), NULL); }
    • 在 Java 中,您可以编写一个对布尔值执行相同操作的方法。
    • 这就是我想弄清楚的哈哈,有什么线索吗?
    • 好吧,弄清楚你想为truefalse写什么(可能是0x01和0x00或0xFFFFFFFF和0x00000000),然后把它写到你的字节数组函数中。
    • 就是这样,我的字节数组函数里不知道真假怎么写,你能解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2011-04-13
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多