制作函数C#

making a function C#

我正在制作一个简单的 C# 训练器,我在其中使用 ReadProcessMemory

目前我是这样做的:

RPM(base,buffer) --> buffer+offset1=finaladdress --> RPM(finaladdress,buffer) -->  
BitConverter.ToInt32(buffer, 0) = value 

现在我想使用一个函数来自动化这个过程(因为这个过程对于多级指针来说太混乱了)。

我发现了这个:

uint []offsets = {0xDFCDD8, 0x13A8, 0x4}
getAddress(offsets);

uint getAddress(offsets[])
{
    int i;
    uint address;
    address = readProcessMemory(offsets[0]);
    for(i=1; i<(sizeof(offsets)/sizeof(uint)); i++)
    {
        address = ReadProcessMemory(address + offsets[i]);
    }
    return address;
}

但我不明白这是怎么回事。谁能给我解释一下或者给我一个其他的功能?

该代码不是非常有效的 C# 代码,因此您可能无法理解它。但基本上它似乎完全按照您所说的手动执行,它只是对数组中的每个元素进行重定向。

这是一个重写的版本,它将是有效的代码加上一些调整,以便更容易描述正在发生的事情。

int GetValueForLives()
{
   uint[] offsets = {0xDFCDD8, 0x13A8, 0x4}
   uint uncastValue = GetAddress(offsets);
   int value = BitConverter.ToInt32(uncastValue, 0);
}

uint GetAddress(uint[] offsets)
{
    int i;
    uint address;
    uint result = readProcessMemory(offsets[0]);
    for(i=1; i < offsets.Length; i++)
    {
        address = result + offsets[i]
        result = ReadProcessMemory(address);
    }
    return result;
}

那么 GetAddress() 所做的基本上就是用 2 次重定向执行您的旧手动方法。

RPM(0xDFCDD8,result) --> address = result + 0x13A8 --> RPM(address,result) --> 
    address = result + 0x4 -->  RPM(address,result) 

然后 returns result 的值,然后 GetValueForLives()uint 值并将其转换为 int 值然后 returns 这 int 对调用者的价值。