ReadProcessMemory не работает с эмулятором Dolphin - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь получить доступ к некоторым значениям в памяти эмуляции 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.

...