Получить образ памяти процесса - PullRequest
3 голосов
/ 21 мая 2011

Моя цель - создать метод, который будет обрабатывать дескриптор процесса и возвращать массив байтов, представляющих память этого процесса.Вот что у меня есть:

    [DllImport("Kernel32.dll")]
    public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, UInt32 nSize, ref UInt32 lpNumberOfBytesRead);

    public static byte[] MemRead(IntPtr handle, IntPtr address, UInt32 size, ref UInt32 bytes)
    {
        byte[] buffer = new byte[size];
        ReadProcessMemory(handle, address, buffer, size, ref bytes);
        return buffer;
    }

Я не знаю, что передать в качестве метода-обертки в качестве аргументов.Я могу найти handle, а bytes - выходную переменную, но как насчет address и size?Где я могу получить эти данные?

1 Ответ

0 голосов
/ 21 мая 2011

Используйте VirtualQuery, чтобы узнать, был ли адрес фактически выделен перед вызовом MemRead. Начните с нуля в качестве адреса и 64 КБ в качестве размера страницы, а затем просто увеличивайте указатель на 64 КБ на каждой итерации, пока не достигнете максимального объема памяти в вашей системе.

...