制作函数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
对调用者的价值。
我正在制作一个简单的 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
对调用者的价值。