C# ReadProcessMemory: so Lesen Sie eine 64-bit memory-Adresse?

Ich bin in der Lektüre Anwendung Speicher. Ich bin mit CheatEngine zu bekommen, einen Speicher-Adresse und dann versucht, die Rückkehr ist es Wert. Aber CheatEngine scheint es wieder 64-bit-Speicheradressen und damit meine ReadProcessMemory-Funktion hält, mir mitzuteilen, dass es nicht in einem 'long' in 'int', wenn ich geben Sie die Adresse ein. Alle tutorials die ich gefunden habe, scheinen zu sein, die basierend auf Speicher-Adressen, sind wie 00AB5678 aber die, die ich bin immer mehr wie D3569227FC.

Also meine Frage ist, wie verwende ich ReadProcessMemory mit viel größeren Speicher-Adressen?

Hier ist mein code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        const int PROCESS_WM_READ = 0x0010;

        [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)
        {
            Process process = Process.GetProcessesByName("MyProgram")[0]; 
            IntPtr processHandle = OpenProcess(PROCESS_WM_READ, false, process.Id); 

            int bytesRead = 0;
            byte[] buffer = new byte[24]; //To read a 24 byte unicode string

            ReadProcessMemory((int)processHandle, 0xD5369227FC, buffer, buffer.Length, ref bytesRead);

            Console.WriteLine(Encoding.Unicode.GetString(buffer) + 
                  " (" + bytesRead.ToString() + "bytes)");
            Console.ReadLine();
        }
    }
}

Edit: ich umgebaut habe meine C# - Anwendung auf einem 64-bit-Anwendung, indem Sie in VS2012-->Projekt-->ApplicationName Eigenschaften-->Bauen-->Plattform Ziel-->Ändern auf "x64", jetzt muss ich nur wissen, wie mein code zum Lesen von 64-bit-Adressen.

  • ist die Zeile bekommen Sie den Fehler? Wenn es in der ReadProcessMemory-Funktion, dann versuchen Sie, die int-cast in lons-cast.... @user1928362
  • Der Fehler ist bei der ReadProcessMemory-Funktion in der Tat, es liest sich genau so, wie: "Die beste übereinstimmung für die überladene Methode ConsoleApplication1.Programm.ReadProcessMemory(int, int, byte[], int, ref int)' hat einige ungültige Argumente", dann folgten "Argument 2: keine Konvertierung von 'long' in 'int'". Das problem ist nicht mit dem ersten argument, es ist das zweite argument. Es funktioniert gut, wenn ich die Adresse ändern, um so etwas wie 0x00AFBCD7, aber es wird nicht akzeptieren, die Adresse CheatEngine mir gab.
InformationsquelleAutor KillerKode | 2015-12-25
Schreibe einen Kommentar