C # ReadProcessMemory: Como ler um endereço de memória de 64 bits?
Estou começando a ler a memória do aplicativo. Estou usando o CheatEngine para obter um endereço de memória e depois tentando retornar seu valor. No entanto, o CheatEngine parece estar retornando endereços de memória de 64 bits e, portanto, minha função ReadProcessMemory continua dizendo que não é possível converter um 'longo' para 'int' sempre que digito o endereço. Todos os tutoriais que encontrei parecem ser baseados em endereços de memória que são como 00AB5678, mas os que estou recebendo são mais parecidos com D3569227FC.
Portanto, minha pergunta é: como uso o ReadProcessMemory com endereços de memória muito maiores?
Aqui está o meu código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
const int PROCESS_WM_READ = 0x0010;
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(int hProcess,
int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);
static void Main(string[] args)
{
Process process = Process.GetProcessesByName("MyProgram")[0];
IntPtr processHandle = OpenProcess(PROCESS_WM_READ, false, process.Id);
int bytesRead = 0;
byte[] buffer = new byte[24]; //To read a 24 byte unicode string
ReadProcessMemory((int)processHandle, 0xD5369227FC, buffer, buffer.Length, ref bytesRead);
Console.WriteLine(Encoding.Unicode.GetString(buffer) +
" (" + bytesRead.ToString() + "bytes)");
Console.ReadLine();
}
}
}
Edit: Eu converti meu aplicativo C # em um aplicativo de 64 bits acessando o VS2012 -> Projeto -> ApplicationName Properties -> Build -> Platform Target -> Altere para "x64", agora só preciso saber como alterar meu código para ler endereços de 64 bits.