Чтение памяти - Не читается даже самый первый базовый адрес - C#

Узнай цену своей работы

Формулировка задачи:

Во общем хочу прочитать память, нужно прочитать так: Читаю базовый адресс 0xFFF6525C, он содержит указатель на другой адресс 0x654CC5E0 этот + смещение содержит другой указатель и так 5 раз. Но не читает даже самый первый базовый адресс...
        private void ReadMem()
        {
            byte[] buf = new byte[4];
            uint oldMemProtect;
            int bytesReaded;
            uint baseAddr = 0xFFF6525C; // В дизассемблере показывает что этот адресс содержим другой адресс 0x546CC80A
            IntPtr hProcess = OpenProcess(ProcessAccessFlagsAll, false, this.pId); // Тут все нормально получаю хендл
 
            VirtualProtect((IntPtr)baseAddr, 4, PAGE_READWRITE, out oldMemProtect); // Меняю защиту на PAGE_READWRITE
            ReadProcessMemory(hProcess, (IntPtr)baseAddr, buf, 4, out bytesReaded); // Читаю в buf
            VirtualProtect((IntPtr)baseAddr, 4, oldMemProtect, out oldMemProtect); // Меняю защиту обратно
            CloseHandle(hProcess);
            
            MessageBox.Show(BitConverter.ToInt32(buf, 0).ToString()); // И тут читает либо криво либо buf = null
            
        }
А вот адресс, в котором лежит простое число, на пример "1150" - читает нормально... Где косяк подскажите... p.s. ReadProcessMemory\VirtualProtect\OpenProcess\CloseHandle - Это простые DllImport'ы.
Решил на другом форуме.
BitConverter.ToUInt32(buf, 0)

Решение задачи: «Чтение памяти - Не читается даже самый первый базовый адрес»

textual
Листинг программы
[DllImport("kernel32", SetLastError = true)]
static unsafe extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte* lpBuffer, int dwSize, IntPtr lpNumberOfBytesRead);
////
public unsafe T Read<T>(IntPtr address) where T : struct
{
    var buffer = new byte[Marshal.SizeOf(typeof(T))];
    fixed (byte* pointer = buffer)
    {
        ReadProcessMemory(this.Process.Handle, address, pointer, buffer.Length, IntPtr.Zero);
        return (T)Marshal.PtrToStructure(new IntPtr(pointer), typeof(T));
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы