C # Как читать значение нескольких указателей с VAMemory.dll - PullRequest
0 голосов
/ 05 июня 2019

У меня есть базовый адрес и несколько указателей, которые мне нужны для чтения значения из них, используя VAMemory.dll на C #.

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, поэтому указатели не являются недействительными.Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 05 июня 2019

Если я правильно понимаю, у вас есть базовый адрес и некоторые смещения. Указатель смещен от адреса. Вы вызываете 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...