我目前正在尝试在使用 Cheat Engine 找到的基本指针上实现 C# 中的内存读取。我 100% 确定我找到了正确的指针和偏移量,因为它们在 Cheat-Engine 中工作得很好,即使在重新启动之间也是如此。
我现在在 C# 中实现它,单级点没有任何问题,但由于某种原因,我无法让我的最后一个多级指针工作。
一切都很顺利,直到它必须添加的最后一个值,然后它返回一些“随机”的东西给我,这些是我找到的指针,我可以看到它在 Cheat Engine 中工作。
这是我在 C# 中的实现:
public static int ReadFromPointer(int address, int[] offsets)
{
Console.WriteLine("----------");
Console.WriteLine("Address: " + address);
int ptr = ReadPointer(address);
Console.WriteLine($"Pointer returned as int: {ptr}, hex: {ptr:X}");
foreach (var offset in offsets)
{
Console.WriteLine($"Adding offset: {offset:X} to Pointer: {ptr:X}");
ptr = ReadPointer(ptr + offset);
Console.WriteLine($"Pointer returned as int: {ptr}, hex: {ptr:X}");
}
Console.WriteLine("----------");
return ptr;
}
private static int ReadPointer(int adress)
{
int ptrNext;
int bytesRead = 0;
byte[] _Value = new byte[4];
ReadProcessMemory((IntPtr)ProcessHandle, (IntPtr)adress, _Value, IntPtr.Size, ref bytesRead);
ptrNext = BitConverter.ToInt32(_Value, 0);
return ptrNext;
}
我使用以下方法调用它:
var valueToFind = ProcessHelper.ReadFromPointer((int)baseAddress + 0x00C45A5C, new []{ 0xEC, 0x1C, 0x178, 0x74, 0x458 });
现在是“随机”部分,除了最后一个指针必须将 0x458 添加到指针 1E138F80 时,每个指针都正确添加,这应该返回 1E1393D8,但最终返回“41C00000”
我不确定这是否是由于我的最后一个指针不再是 4 个字节,或者是否由于某种方式发生了将其混淆的转换。这里的任何帮助将不胜感激!