2013-09-08 3 views
1

Я пытаюсь получить строковое значение из адреса, который я нашел, используя чит-движок. Я нашел, например, 0x01742A38 и это основная часть моей программы (обычные окна формы приложения):C# readprocessmemory с Cheat Engine

  Process[] processes = Process.GetProcessesByName("Tibia"); 

      foreach (Process p in processes) 
      { 
       IntPtr windowHandle = p.MainWindowHandle; 
       byte[] bufor = new byte[50]; 
       uint baseAddress = (uint)p.MainModule.BaseAddress.ToInt32(); 
       IntPtr addr = ((IntPtr)(baseAddress + 0x01742A38)); 
       uint o = 0; 
       UInt32 k = 30; 
       if (ReadProcessMemory(windowHandle, addr, bufor, k, ref o)) 
       { 
        label3.Text = "Success!"; 
       } 
       else 
       { 
        label3.Text = "Fail : ("; 
       } 
      } 

ответ

1

Предполагая, что ваш статический адрес правильно, вы должны открыть целевой процесс, используя OpenProcess function по крайней мере, право PROCESS_VM_READ (0x0010) ,

Я также предлагаю вам использовать более подходящий PInvoke подписи для функции ReadProcessMemory:

[DllImport("kernel32.dll", SetLastError = true)] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out IntPtr lpNumberOfBytesRead);