Я пытаюсь получить доступ к некоторым значениям в памяти эмуляции Smash Bros Melee, запущенной в Dolphin.Режим отладки Dolphin говорит, что адрес нужного мне значения - 0x80C6BA10 (я предполагаю, что это означает 0x00C6BA10, потому что 0x80C6BA10 превышает целочисленный предел, и ранее он ссылался на тот же адрес, что и 0x00C6BA10).Но когда я передаю это в функцию ReadProcessMemory, я получаю массив байтов, который просто [0,0,0,0] (я использую 4 байта, потому что значение, которое я пытаюсь получить, представляет собой шестнадцатеричное число из 8 цифр),
Я пытался использовать OllyDbg для проверки правильности адреса, но по какой-то причине Dolphin не работает с OllyDbg, возможно, потому что он не 64-битный?Я также попытался использовать метод unchecked (), чтобы передать 0x80C6BA10 вместо 0x00C6BA10.
public class Program
{
//Constant that says we want to just read memory
const int PROCESS_WM_READ = 0x0010;
// **** Imports the functions used to get memory data ****
[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)
{
//Gets process by finding the first process with the name dolphin
Process melee = Process.GetProcessesByName("Dolphin")[0];
IntPtr processHandle = OpenProcess(PROCESS_WM_READ, false,
melee.Id);
int bytesRead = 0;
//The list that will be populated by the data we find in the
memory
byte[] buffer = new byte[4];
//Reads the memory at the specified location
ReadProcessMemory((int)processHandle, 0x00C6BA10, buffer,
buffer.Length, ref bytesRead);
//Converts byte array into floating point number -- not currently
being used
float memoryValue = BitConverter.ToSingle(buffer, 0);
foreach (byte b in buffer)
{
Console.WriteLine(b);
}
Console.ReadLine();
}
}
Я ожидаю, что выходной результат будет любым, кроме 0, но я получаю массив 0.Я думаю, что часть проблемы может заключаться в том, что я пытаюсь получить значения памяти из процесса, который выполняется как подпроцесс Dolphin.