Pointer auslesen!

03/24/2012 15:48 FreeCoder#1
Schönen Guten Abend Zusammen,

also ich brauche eure Hilfe bei einer Sache.

Ich versuche seit Tagen den Wert eines Multi-LvL Pointer mit einer Klasse auszulesen.
Doch dies funktioniert nicht. Ich glaube es liegt nicht an der Klasse sondern an dem Aufbau.

Wenn ich Wert von Normale Adresse auslesen will funktioniert es ohne Probleme:

[Only registered and activated users can see links. Click Here To Register...]

Aber sobald ich Pointer verwenden möchte kommt dann nur 0 raus.

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]


Ich füge die Klasse mal hinten an.
Die Klasse darf nicht ohne Erlaubnis weitergegeben werden. (Vom Programmierer gewünscht)
03/25/2012 20:55 jacky919#2
Der Fehler ist wohl:
Code:
int memoryaddress = 0x000BB0E8;
CheatEngine sagt dir ja bereits, dass die Adresse Solitaire.exe+000BB0E8.
Folglich musst du zu der Baseaddress von dem Prozess 0x000BB0E8 addieren und dies als Adress nehemen.
03/26/2012 17:46 FreeCoder#3
Quote:
Originally Posted by jacky919 View Post
Der Fehler ist wohl:
Code:
int memoryaddress = 0x000BB0E8;
CheatEngine sagt dir ja bereits, dass die Adresse Solitaire.exe+000BB0E8.
Folglich musst du zu der Baseaddress von dem Prozess 0x000BB0E8 addieren und dies als Adress nehemen.
Ok danke für die Info nun muss ich nur noch eine Methode/Funktion finden die mir die Baseaddress zurück gibt^^.
03/26/2012 18:02 jacky919#4
Eventuell funktioniert das hier: [Only registered and activated users can see links. Click Here To Register...]
03/26/2012 20:38 FreeCoder#5
ok hab nun eine nette Funktion in VB gefunden die Baseadresse zurück gibt.
Die Funktion habe ich nun in C# Konvertiert doch da ich wohl etwas schief gelaufen^^. Könntest du mir vielleicht dabei helfen^^.

VB Code:

Code:
    Public Function GetModuleBase(ByVal ProcName As String, ByVal ModuleName As String)
        Dim BaseAddress As Int32
        For Each PM As ProcessModule In Process.GetProcessesByName(ProcName)(0).Modules
            If ModuleName.ToLower = PM.ModuleName.ToLower Then
                BaseAddress = PM.BaseAddress
            End If
        Next
        Return BaseAddress
    End Function
C# Code:

Code:
public object GetModuleBase(string ProcName, string ModuleName)
{
	Int32 BaseAddress = default(Int32);
	foreach (ProcessModule PM in Process.GetProcessesByName(ProcName)[0].Modules) {
		if (ModuleName.ToLower() == PM.ModuleName.ToLower()) {
			BaseAddress = PM.BaseAddress;
		}
	}
	return BaseAddress;
}
03/26/2012 20:39 jacky919#6
Was sagt der Compiler? :)
03/26/2012 20:42 FreeCoder#7
Process ist im aktuellen Kontext nicht vorhanden.
03/26/2012 20:49 xNopex#8
Namensraum angeben?

C#
Code:
using System.Diagnostics;
03/26/2012 20:52 FreeCoder#9
Jetzt ist dieser Fehler^^.

[Only registered and activated users can see links. Click Here To Register...]
03/26/2012 20:54 xNopex#10
Eckige Klammern um die 0?

EDIT: Kopieren will gelernt sein..
03/26/2012 20:54 FreeCoder#11
Ja das habe ich auch gerade gemerkt xD.
Und nun dieser Fehler^^.

[Only registered and activated users can see links. Click Here To Register...]
03/26/2012 20:55 xNopex#12
Code:
BaseAddress = (int)PM.BaseAddress;
Lern die Sprache. Bitte.
Moment ich sehe du arbeitest mit Int32. Weiß nicht ob es da sinn macht nach Int32 zu casten.. Warum arbeitest du mit Int32?

EDIT: Scheinbar funktionierts doch...
03/26/2012 21:28 FreeCoder#13
ok hab mal so Baseadresse ausgegeben.

Code:
MessageBox.Show(lol.GetModuleBase("ck2", "ck2.exe").ToString());
Die Funkion gibt 11599872 zurück, doch CE 00B10000.
Also kann da irgendwie nicht was stimmen oder xD.
03/26/2012 21:35 xNopex#14
Klar stimmt das. CE stellt die Zahl nur zu einer anderen Basis da. Nämlich 16. Das was du ausgegeben bekommst ist die gleiche Zahl zur Basis 10.
03/29/2012 15:05 Peacem4k3r#15
Du kannst sie einfach zur Basis 16 konvertieren:

Code:
string hex = intVariable.ToString("X");