从进程内存中读取int

本文关键字:读取 int 内存 进程 | 更新日期: 2023-09-27 18:26:51

我正在使用基本地址和一些偏移量从内存中读取数据:

public static int ReadInt(long address)
{
    byte[] buffer = new byte[sizeof(int)];
    ReadProcessMemory(pHandle, (UIntPtr)address, buffer, (UIntPtr)4,
                      IntPtr.Zero);
    return BitConverter.ToInt32(buffer, 0);
}

我添加这样的偏移:

var one = MemoryHandler.ReadInt((long)MemoryHandler.base_adress + 
                                (long)0x0945BB0C);
var two = MemoryHandler.ReadInt(one + (long)0x28);
var three = MemoryHandler.ReadInt(two + (long)0x214);
var four = MemoryHandler.ReadInt(three + (long)0x38);
var five = MemoryHandler.ReadInt(four + (long)0x7EC);
var six = MemoryHandler.ReadInt(five + (long)0x230);

其中six包含我需要的值。

我试着做一个过载,做同样的事情。我的问题是它没有给我同样的价值。我想知道为什么:

public static int ReadInt(long address, int[] offsets)
{
    long prev = 0;
    for (int i = 0; i < offsets.Length; i++)
    {
        address = prev > 0 ? ReadInt(prev + (long)offsets[i]) : ReadInt(address);
        prev = address + offsets[i];
    }
    return (int)address;       
}
var offsets = new int[] { 0x28, 0x214, 0x38, 0x7EC, 0x230 };
var result = MemoryHandler.ReadInt((long)MemoryHandler.base_adress + 
                                 (long)0x0945BB0C, offsets);

只是澄清一下:我希望result的值与上面的six的值相同。

从进程内存中读取int

注意,这只适用于32位

public static int ReadInt(long address, int[] offsets)
{
    address = ReadInt(address);
    for (int i = 0; i < offsets.Length; i++)
    {
        address = ReadInt(address + (long)offsets[i]);
    }
    return (int)address;       
}

您有offsets.Length + 1 ReadInt(s)要做,一个没有偏移,offsets.Length有偏移。每个都返回下一个的地址。最后一个返回一个值。

考虑到这只适用于32位(因为您正在读取32位并将其用作ptr),使用long是无用的。CCD_ 8就足够了。