그래서 게임의 제작자에게 더 많은 수준의 편집기 도구 (이 값에 대한 포인터가있는 고급 알고리즘을 사용하여 게임 값을 조정하여)를 제공하는 프로그램을 만들고 있습니다. 바로 가기에 대한 값을 설정/검색하는 방법을 만들었습니다. 입력 포인터. 그러나 게임에는 Int32, Float 및 Boolean 변수가 있으므로 동일한 수의 포인터에 대해 각 데이터 유형마다 3 가지 방법이 필요하며 포인터에서 값을 검색하는 데 총 15 가지 방법을 제공하는 각각 5 가지 오버로드가 있습니다. 코드가없는 메소드는 다음과 같습니다.동일한 알고리즘으로 다른 데이터 형식 값을 반환 할 때 일반 형식 메서드 또는 지정된 형식 알고리즘?
public static int GetIntFromPointers(IntPtr baseAddress, IntPtr offset0)
public static int GetIntFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1)
public static int GetIntFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2)
public static int GetIntFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2, IntPtr offset3)
public static int GetIntFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2, IntPtr offset3, IntPtr offset4)
public static float GetFloatFromPointers(IntPtr baseAddress, IntPtr offset0)
public static float GetFloatFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1)
public static float GetFloatFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2)
public static float GetFloatFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2, IntPtr offset3)
public static float GetFloatFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2, IntPtr offset3, IntPtr offset4)
public static bool GetBoolFromPointers(IntPtr baseAddress, IntPtr offset0)
public static bool GetBoolFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1)
public static bool GetBoolFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2)
public static bool GetBoolFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2, IntPtr offset3)
public static bool GetBoolFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2, IntPtr offset3, IntPtr offset4)
이제는 그 중 일부가 작동하지 않는 이유를 묻지 않습니다. 그들은 실제로 잘 작동합니다 (저는 생각합니다).하지만 모든 다른 유형에 대한 일반적인 방법을 만들 가능성에 대해서도 생각해 봤습니다. 그러나 실제로 방법을 알지 못하고 그런 방법을 만드는 것에 대해 확신하지 못합니다.
[DllImport("Kernel32.dll", SetLastError = true)]
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, ref uint lpNumberOfBytesRead);
public static byte[] ReadMemory(int address, int processSize, int processHandle)
{
byte[] buffer = new byte[processSize];
uint sth = 0;
ReadProcessMemory(new IntPtr(processHandle), new IntPtr(address), buffer, (uint)processSize, ref sth);
return buffer;
}
:
public static int GetIntFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2, IntPtr offset3, IntPtr offset4)
{
IntPtr baseAddressValue = new IntPtr(BitConverter.ToInt32(MemoryStuff.ReadMemory((int)baseAddress, 4, (int)processHandle), 0));
IntPtr offset0Value = new IntPtr(BitConverter.ToInt32(MemoryStuff.ReadMemory((int)baseAddressValue + (int)offset0, 4, (int)processHandle), 0));
IntPtr offset1Value = new IntPtr(BitConverter.ToInt32(MemoryStuff.ReadMemory((int)offset0Value + (int)offset1, 4, (int)processHandle), 0));
IntPtr offset2Value = new IntPtr(BitConverter.ToInt32(MemoryStuff.ReadMemory((int)offset1Value + (int)offset2, 4, (int)processHandle), 0));
IntPtr offset3Value = new IntPtr(BitConverter.ToInt32(MemoryStuff.ReadMemory((int)offset2Value + (int)offset3, 4, (int)processHandle), 0));
int value = BitConverter.ToInt32(MemoryStuff.ReadMemory((int)offset3Value + (int)offset4, 4, (int)processHandle), 0);
return value;
}
그리고 경우에 당신이 MemoryStuff.ReadMemory
일이 무엇인지 궁금
GetIntFromPointers(IntPtr baseAddress, IntPtr offset0, IntPtr offset1, IntPtr offset2, IntPtr offset3, IntPtr offset4)
방법에 대한 코드는
형식에 따라 값의 길이를 변경해야하기 때문에 쉽지 않습니다. 기본적으로 if ... else 조건을 만드는 방법이 있는지 묻습니다. 'T'의 타입은 조건 파라미터입니다. – AlFas
func를 사용하기위한 옵션으로 업데이트 ... 더 좋았습니까? – Braydie
func을 사용하여'BitConverter'에서 호출 할 메서드를 전달할 수도 있습니다 – Braydie