Verwenden von Basiszeigern mit Versatz zum Lesen des Prozessspeichers

Ich habe stundenlang im Internet gesucht und kann nicht nachvollziehen, warum der folgende Code nicht funktioniert.

Die Basisadresse, die für den Prozess abgerufen wird, scheint falsch zu sein. Wenn ich die Endadresse direkt in dieReadMemoryIch bekomme den gewünschten Wert raus (damit ich weiß, dass ich den richtigen Prozess und alles habe).

Ich habe das nicht gepostetMemoryHandler klasse, da klappt das so wie es soll

Könnte es etwas damit zu tun haben, dass ich auf einem 64-Bit-Windows bin? Das Spiel ist 32-Bit (installiert im Ordner "Programme (x86)").

public partial class MainForm : Form
{

    Process myProcess = Process.GetProcessesByName("ffxiv").FirstOrDefault();

    public MainForm()
    {
        InitializeComponent();
    }

    private void startButton_Click(object sender, EventArgs e)
    {
        IntPtr baseAddress = myProcess.MainModule.BaseAddress;
        Console.WriteLine("Base Address: " + baseAddress.ToString("X"));

        IntPtr newAddr = IntPtr.Add(baseAddress, 0xF8BEFC);
        IntPtr finalAddr = IntPtr.Add(newAddr, 0x1690);

        int bytesRead;
        byte[] memoryOutput = MemoryHandler.ReadMemory(myProcess, finalAddr, 4, out bytesRead);

        int value = BitConverter.ToInt32(memoryOutput, 0);
        Console.WriteLine("Read Value: " + value);
    }
}

BEARBEITEN: Basisadresse war richtig, meine Code-Logik um Zeiger war falsch, siehe vollständige Antwort unten.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage