Pointer verwenden

12/16/2009 16:04 HipTheHop#1
Hallo,
ich möchte gerne wissen, wie ich einen Pointer in mein Skript einbinde (SuFu ergab nichts hilfreiches).
Habe einen Pointer von Nostale mit CE gefunden, den für die HP, wie muss ich das Skript schreiben, damit er abgerufen und seine Mems gelsen werden?

Lg, Drugdog
12/16/2009 16:17 °Remus°#2
[Only registered and activated users can see links. Click Here To Register...]

sollte dir weiterhelfen
12/16/2009 16:32 HipTheHop#3
Hilft mir nicht besonders,
ich möchte nicht direkt die Memories einbinden, sondern das ganze über einen Pointer machen. Wie funktioniert das dann? Muss ich mit dem Pointer über erst die Memory rausfinden?
Sprich:

Code:
$pointermem = _MemoryRead("die mem des pointers")
$mem = _MemoryRead("Die mem, mit der ich die HP auslese")
die $mem verwende ich dann zum auslesen. Geht das so?
12/16/2009 17:09 .nAno#4
also, als erstes muss du auch _MemOpen, bzw. _MemClose verwenden (geh ich jetz einfach ma von aus das du das gemacht has, wollt nur drauf hinweisen :P)

ansonsten kanns du fürs grobe auslesen auch einfach ne Standard adresse nehmen ;)
(funtioniert zumindest bei meinem FlyffBot problemlos ;) )
12/16/2009 17:17 HipTheHop#5
Ich möchte einfach nur gerne wissen, wie ich den Pointer verwenden kann, wenn ich ihn schonmal habe, da sich die Memory bei verschiedenen PCs ändert. Es funktioniert jedenfalls nicht so, wie ichs mir gedacht habe.
12/16/2009 17:55 °Remus°#6
Quote:
Originally Posted by HipTheHop View Post
Hilft mir nicht besonders,
ich möchte nicht direkt die Memories einbinden, sondern das ganze über einen Pointer machen. Wie funktioniert das dann? Muss ich mit dem Pointer über erst die Memory rausfinden?
Sprich:
Code:
$pointermem = _MemoryRead("die mem des pointers")
$mem = _MemoryRead("Die mem, mit der ich die HP auslese")
die $mem verwende ich dann zum auslesen. Geht das so?
sry dachte dort würden auch pointer auch erklärt werden,
also du musst als erstes den pointer auslesen, dann musst du die adresse die du dadurch bekommst mit dem offset addieren und schon hast du deine adresse, also würde das so aussehen

Code:
$pointermem = _MemoryRead("die mem des pointers")
$mem = _MemoryRead($pointermem + $offset)
12/16/2009 23:06 HipTheHop#7
...mache ich das bei der Pointersuche denn richtig?
Ich verfahre so (bei Nostale):

CE und Nostale öffnen.
Dann meine MP mit CE suchen, durch Skills MP senken und solange weitersuchen, bis ich eine Addresse habe (0267741C).
Diese doppelklicke ich dann, so dass sie unten steht.
Dann einen Rechtsklick drauf und "Find out what writes to this address" wählen. Die Meldung für den Debugger bestätigen. Dann öffnet sich so ein kleines Fenster, welches leer ist. Durch verändern meiner MP erscheint dann ein Listeneintrag. Ich klicke ihn an und gehe auf "More Information".
Dann lese ich die Addresse aus (in meinem Fall ist es die EBX(026773D0) mit dem Offset "4c").
Dann suche ich den Hexwert 026773D0, wähle dann "Add Address manually" und mache ein Häkchen bei "Pointer". Dann geb ich in die 2 unteren Felder die grade durch den Hexwert ermittelte Addresse ein und das Offset 4c und klicke OK.

Nun mache ich einen Rechtsklick auf den grade hinzugefügten Eintrag und wähle "Find out what accesses this address", warte bis ein kleines Fenster kommt und ändere meinen MP wert, sodass ein paar Listeneinträge kommen. Dann nehme ich den Obersten und klicke auf "More Information".

Dann nehme ich wieder den angegebenen Wert (ist wieder der EBX, Addresse weiß ich grad nich) + Offset.

Nun suche ich den Neuen Wert wieder mit Häkchen bei "Hex". Die grüne Addresse, die gefunden wird ist jetzt mein Pointer oder? Oder mache ich irgendwas falsch?
Habs nach dem Tut hier gemacht: [Only registered and activated users can see links. Click Here To Register...]

Wenn ich es anders machen soll, bitte erklären oder wenn ihr ein gutes Tut kennt den Link posten.

Mfg, HipTheHop
12/17/2009 00:20 MoepMeep#8
Die grünen adressen sind statische wenn mich grad nicht alles täuscht.

Und gibts in autoit kein ReadProcessMemory?
12/17/2009 00:32 | Moep |#9
Nettes Video Tut:

Also in Autoit lese ich meine Pointer immer nach folgendem Prinzip aus
Code:
#include <nomadmemory.au3>
_MemoryRead(_MemoryRead(_MemoryRead(_MemoryRead(_MemoryRead(_MemoryRead($BASE, $PID)+$POINTER_1, $PID)+$POINTER_2, $PID)+$POINTER_3, $PID)+$POINTER_4, $PID)+$POINTER_5, $PID)
Pointer 1 is der Pointer den du als letzes in ce gefunden hast, pointer 2 demzufolge der vorletze usw...

@MoepMeep, ja sind die grünen. Und ja in Autoit gibts sowas wie ReadProcessMemory auch, wenn du die nomadmemory.au3 heißt die Funktion dann halt _MemoryRead().
12/17/2009 13:22 HipTheHop#10
Erst nich durchgeblickt, jetzt hab ichs glaube verstanden. Dachte, man könnte das ganze auch direkt über nen normalen Pointer ermitteln.
Hab jetzt folgendes raus: Erste Addresse +4c: 0267743c,
Dann kam diese (müsste die vom Char sein), ohne offset: 026773D0
Dann kam der 2. Pointer +b0: 02747250
Dann die Statische für die MP: 00787E44

Dann habe ich eine Addresse hinzugefügt: Häkchen bei Pointer, der 1. Pointer ist jetzt:
0078E44(Statische) + b0 (2. Pointer)
Der nächste Pointer, denn ich eingetragen hab war dann ja bereits da(02747250), +4c ergibt dann die Addresse für die MP.

Muss ich das dann so in AutoIt einbinden:?

Code:
$pid = WinGetProcess("NosTale")
$base = 0078E44
$pointer1 = b0
$pointer2 = 4c
$Pointer1 (als letztes dazugekommen) =
#include <NoMadMemory.au3>
$MP = _MermoryRead(_MemoryRead(_MemoryRead($base, $pid)+pointer1, pid) +$pointer2, $pid)
oder hab ichs falsch verstanden?
Ich probier mal, obs geht^^
12/17/2009 14:04 HipTheHop#11
Funktioniert nicht, bekomme als ausgabe für $MP immer 0
12/17/2009 15:07 Xereon#12
Quote:
Originally Posted by HipTheHop View Post
Erst nich durchgeblickt, jetzt hab ichs glaube verstanden. Dachte, man könnte das ganze auch direkt über nen normalen Pointer ermitteln.
Hab jetzt folgendes raus: Erste Addresse +4c: 0267743c,
Dann kam diese (müsste die vom Char sein), ohne offset: 026773D0
Dann kam der 2. Pointer +b0: 02747250
Dann die Statische für die MP: 00787E44

Dann habe ich eine Addresse hinzugefügt: Häkchen bei Pointer, der 1. Pointer ist jetzt:
0078E44(Statische) + b0 (2. Pointer)
Der nächste Pointer, denn ich eingetragen hab war dann ja bereits da(02747250), +4c ergibt dann die Addresse für die MP.

Muss ich das dann so in AutoIt einbinden:?

Code:
$pid = WinGetProcess("NosTale")
$base = 0078E44
$pointer1 = b0
$pointer2 = 4c
$Pointer1 (als letztes dazugekommen) =
#include <NoMadMemory.au3>
$MP = _MermoryRead(_MemoryRead(_MemoryRead($base, $pid)+pointer1, pid) +$pointer2, $pid)
oder hab ichs falsch verstanden?
Ich probier mal, obs geht^^
1. Bitte keine Doppelposts
2. Hexadezimale Zahlen müssen mit einen 0x davor angebegeben werden, zB:
0x4C
12/17/2009 16:04 HipTheHop#13
Habs in meinem Skript, mit dem ichs probiert habe gemacht, wird trotzdem 0 ausgegeben
12/17/2009 17:54 | Moep |#14
bekommst dus denn hin den wert über die pointer in ce auszulesen?
12/17/2009 19:43 HipTheHop#15
Also über CE klappts wunderbar.