Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wert aus fremder Speicheradresse abrufen
Qweide
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

Wert aus fremder Speicheradresse abrufen

beantworten | zitieren | melden

Hallo,

Ich möchte die Koordinaten eines Charakters aus einem Spiel in meinem Programm verwenden. Die Adressen der Koordinaten kenne ich bereits.
Wie kann ich die Werte aus den Adresse abrufen und verarbeiten?
Ich weiß, dass das irgendwie mit Pointern geht, aber wie genau weiß nicht nicht. Ich hoffe, jemand kann mir helfen.
private Nachricht | Beiträge des Benutzers
Jamikus
myCSharp.de - Member



Dabei seit:
Beiträge: 251
Herkunft: Oberhausen (NRW)

beantworten | zitieren | melden

In etwa das:
SUCHE: Speicher manipulation, RAM auslesen, rein schreiben
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Jamikus am .
private Nachricht | Beiträge des Benutzers
Qweide
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Danke erstmal für die Antwort. Nachdem ich mir die Links angeschaut habe, habe ich folgendes Konstrukt zusammen gebaut:

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

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

        unsafe public static string[] getCharValues()
        {
            try
            {
                Process[] pr = Process.GetProcessesByName("Prozess.exe");
                Process process = pr[0];
                uint baseAdress = (uint)process.MainModule.BaseAddress.ToInt32();
                uint o = 0;
                byte[] ret = new byte[10];
                ReadProcessMemory(process.Handle, (IntPtr)(process.MainModule.BaseAddress+0x156CC38), ret, (UInt32)ret.Length, ref o);
                return new string[] { BitConverter.ToSingle(ret, 0).ToString() };
            }
            catch(IndexOutOfRangeException)
            {
                MessageBox.Show("Prozess ist vermutlich nicht geöffnet");
                return new string[] {""};
            }
        }
    }
}
Der Rückgabewert der Methode wird nach deren Ausführung in eine Textbox geschrieben. Dieser Wert ist jedoch immer 0. Cheat Engine zeigt mir den richtigen Wert an.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Qweide am .
private Nachricht | Beiträge des Benutzers
wcseller
myCSharp.de - Member



Dabei seit:
Beiträge: 191

beantworten | zitieren | melden

Du solltest versuchen, mit dem Debugger genauer einzugrenzen, wo das Problem auftritt. So ist es ziemlich schwierig, was konstruktives beizutragen...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von wcseller am .
private Nachricht | Beiträge des Benutzers