【问题标题】:C# How to read Multiple Pointers Value with VAMemory.dllC# 如何使用 VAMemory.dll 读取多指针值
【发布时间】:2019-06-05 17:55:04
【问题描述】:

我有一个基地址和几个指针,我需要使用 C# 上的 VAMemory.dll 读取它们的值。

https://i.postimg.cc/QdfxtnbD/sdfsdfsdfdg.png

我是这样做的:

VAMemory vam = new VAMemory(process);
int LocalPlayer = vam.ReadInt32((IntPtr)0x00EE231C);
int address = vam.ReadInt32((IntPtr)(LocalPlayer + 0x30));
address = vam.ReadInt32((IntPtr)(address + 0x0));
address = vam.ReadInt32((IntPtr)(address + 0x1BC));
address = vam.ReadInt32((IntPtr)(address + 0x178));
address = vam.ReadInt32((IntPtr)(address + 0x0));
address = address + 0x4;

int value = vam.ReadInt32((IntPtr)address);
Console.WriteLine("     value: " + value);

但它不起作用。我在 StackOverflow 上检查了几个解决方案,但仍然找不到有效的解决方案。 我可以使用 Cheat Engine 很好地读取该值,因此指针不是无效的。请帮帮我。

【问题讨论】:

    标签: c# memory


    【解决方案1】:

    如果我的解释正确,那么您有一个基地址和一些偏移量。指针从地址偏移。 您调用IntPtr.Add(address, offset) 为每个计算指针添加一个偏移量。

    private int GetPointerValue(Int32 baseAddress, int[] offsetArr)
    {
        IntPtr pointer = IntPtr.Add((IntPtr)vam.ReadInt32(baseAddress), offsetArr[0]);
        for (int i = 1; i < offsetArr.Length; i++)
        {
            pointer = IntPtr.Add((IntPtr)vam.ReadInt32(pointer), offsetArr[i]);
        }
        return vam.ReadInt32(pointer);
    }
    
    private Int32 baseAddress = 0xEE231C;
    private var offsetArr = new int[]{ 0x30, 0x0, 0x1BC, 0x178, 0x0, 0x4 };
    
    Console.WriteLine("     value: " + GetPointerValue(baseAddress, offsetArr));
    

    【讨论】:

    • 嘿,我已经实现了它,现在有一个问题说:“无法从'int'转换为'System.IntPtr'”对于这一行: var pointer = IntPtr.Add((IntPtr )vam.ReadInt32(baseAddress), offsetArr[0]);
    • 对不起,我没有测试这个。将 var 更改为 IntPtr。以及 var baseAddress 到 Int32 baseAddress。我在您可以参考的代码中对其进行了编辑。您可以在我的 github github.com/mfloob/TreeGlide/blob/master/TreeGlide/Managers/… 上查看我过去是如何做到这一点的
    猜你喜欢
    • 2015-08-09
    • 2017-02-25
    • 2021-12-16
    • 2020-05-10
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多