ReadProccessMemory с C # - PullRequest
       3

ReadProccessMemory с C #

1 голос
/ 03 марта 2012

Я пишу программу, которая создает процесс, а затем читает некоторые биты из его памяти.Чтобы получить адрес, я использовал отладчик OllyDbg.

using System;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace winapi
{
    class Program
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool ReadProcessMemory(
          IntPtr hProcess,
          IntPtr lpBaseAddress,
          [Out] byte[] lpBuffer,
          int dwSize,
          out UInt32 lpNumberOfBytesRead
         );


        static void Main()
        {
            Console.WriteLine("WinAPI test");
            Console.WriteLine("---");
            Console.WriteLine();

            var startInfo = new ProcessStartInfo { FileName = "Program.exe" };
            Process p = Process.Start(startInfo);
            var bytes = new byte[4];
            uint read = 0;
            p.WaitForInputIdle();
            //  

            while (read == 0)
            {
                ReadProcessMemory(p.MainWindowHandle, (IntPtr)0x052f820, bytes, bytes.Length, out read);    
                System.Threading.Thread.Sleep(10);
            }

            Console.WriteLine(read.ToString());
            Console.ReadLine();
        }
    }
}

после начала процесса мой цикл никогда не заканчивается.данные отладчика:

0052F820 | 75 2F 3F 72 61 67 65 5F 69 64 3D 31 33

где моя ошибка?

Ответы [ 2 ]

2 голосов
/ 03 марта 2012

Ответ уже предоставлен @zmbq.ReadProcessMemory не ведет себя как Stream, где каждая операция чтения добавляет общее количество операций чтения к позиции потока.

Я все еще вижу другую проблему с кодом, вы передаете дескриптор окна вместо дескриптор процесса .Поэтому, даже если вы получите результат, он фактически не читает память вашего целевого процесса.

2 голосов
/ 03 марта 2012

С чего бы это закончиться?Вы читаете одни и те же 4 байта снова и снова.ReadProcessMemory не работает как поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...