Pointer spielt verrückt

01/06/2014 14:49 mo.tennis#1
Hey Leute,
ich bins mal wieder.

In den letzten Tagen, hab ich mir ein Programm erstellt, was mir die
Characterinformation meins Chars aus dem Spiel Silkroad online per
Memoryreading ausgibt.
Funktioniert auch alles soweit ganz gut. Jedoch spielt der Pointer für das Level
verrückt. Mal funktioniert er und gibt mein Level aus und wenn ich das Spiel neustarte Funktioniert er aufeinmal nicht mehr. und dan wieder ....etc.

Es ist der Gleiche Pointer wie von den andren Daten(Exp, Sp, Hp,Mp) nur mit anderen Offsets.
Hoffe jemand kann mir erklären was da Falsch läuft oder woran soetwas liegen kann...

Gruß Mo.tennis
01/06/2014 15:32 lolkop#2
Quote:
Originally Posted by mo.tennis View Post
Hey Leute,
ich bins mal wieder.

In den letzten Tagen, hab ich mir ein Programm erstellt, was mir die
Characterinformation meins Chars aus dem Spiel Silkroad online per
Memoryreading ausgibt.
Funktioniert auch alles soweit ganz gut. Jedoch spielt der Pointer für das Level
verrückt. Mal funktioniert er und gibt mein Level aus und wenn ich das Spiel neustarte Funktioniert er aufeinmal nicht mehr. und dan wieder ....etc.

Es ist der Gleiche Pointer wie von den andren Daten(Exp, Sp, Hp,Mp) nur mit anderen Offsets.
Hoffe jemand kann mir erklären was da Falsch läuft oder woran soetwas liegen kann...

Gruß Mo.tennis
es gibt in silkroad nur einen pointer, welcher auf die charbase zeigt. abgesehen von zeigern auf strings sind alle werte über ein einzelnes offset erreichbar.

da du hier von offsets (plural) sprichst, gehe ich davon aus, das dein level offset falsch ist.
01/06/2014 23:08 mo.tennis#3
Aber manchmal funktioniert es ja. Und manchmal zeigt er wieder irgend ne wilde Zahl an.
Und du hast recht. Alles ein Pointer und für die verschiedenen Sachen verschiedene Offsets. Achja. Da du hier von Strings spricht. Hast du ne Ahnung, wie ich den Namen des Chars finde?

Ps: falsch du es falsch verstanden hast. Der levelpointer hat nur ein Offset. Gruß Mo.tennis
01/07/2014 00:39 lolkop#4
Quote:
Originally Posted by mo.tennis View Post
Aber manchmal funktioniert es ja. Und manchmal zeigt er wieder irgend ne wilde Zahl an.
Und du hast recht. Alles ein Pointer und für die verschiedenen Sachen verschiedene Offsets. Achja. Da du hier von Strings spricht. Hast du ne Ahnung, wie ich den Namen des Chars finde?

Ps: falsch du es falsch verstanden hast. Der levelpointer hat nur ein Offset. Gruß Mo.tennis
vermutlich liest du den wert mit falschem typ aus. viele numerische werte werden je nach maximalwert verschieden deklariert. so werden level angaben oft als short oder gar byte angegeben, während andere angaben wie zb erfahrung oft als ulong angegeben, weil int bzw uint einfach die hohen werte nichtmehr unterstützen würden...

zu deiner string frage kann ich nur sagen, das strings in der regel als char array angegeben werden. hier legen die meisten compiler intern einen pointer auf das array an. somit zeigt der pointer mit zugehörigem offset oftmals nur auf den string pointer und nicht auf den string.
01/07/2014 08:00 mo.tennis#5
mh.. ok danke, aber ich dachte autoit unterstützt nur dword sprich 4 byte oder lieg ich da falsch?
Wenn ja wie sind die begriffe für die andern datentypen?
01/07/2014 08:44 YatoDev#6
string, word , dword , byte , qword (ka xd)

Wikipedia.... google....
01/08/2014 09:41 FacePalmMan#7
gib "DllStructCreate" bei Scite ein, markier es und drück F1. es sollte ein hilfe-fenster aufgehen. wenn du ein wenig runterscrollst siehst du dann eine liste mit sachen wie z.b BYTE,BOOLEAN,CHAR,WCHAR,short,USHORT,WORD,int,long e.t.c

wenn man in autoit einen text aus der memory auslesen will benutzt man "char[textlänge]"
beispiel:
Code:
$IchBinKeineVariableIchPutzeHierNur=_MemoryRead(0x50656E6973, $PID, "char[5]")
01/08/2014 15:24 mo.tennis#8
danke für eure Hilfe. Werd ich mir auf jedenfall angucken

@lolkop... wenn ich es mit dem falschen datentyp angegeben hätte, würde er dann nicht immer den falschen Wert ausgeben?
01/08/2014 15:36 lolkop#9
Quote:
Originally Posted by mo.tennis View Post
danke für eure Hilfe. Werd ich mir auf jedenfall angucken

@lolkop... wenn ich es mit dem falschen datentyp angegeben hätte, würde er dann nicht immer den falschen Wert ausgeben?
angenommen du hast als adresse für dein level 0x12345678
der inhalt [8byte] sieht etwa so aus:
Code:
01 00 00 00 00 00 00 00
dein level ist hier als word gespeichert (also 2byte)

in diesem fall wird dir das level korrekt ausgegeben (egal ob du byte, word, dword oder qword ausliest). ändern sich aber die folgenden werte zb so:
Code:
01 00 01 00 01 00 01 00
würde der inhalt der ausgaben sich drastisch ändern:
Code:
byte: 1 (stimmt zufällig immernoch mit deinem lvl überein)
word: 1
dword: 65537
qword: 281479271743489
jede noch so kleine abwanldung der folgewerte würde bei falschem auslesen drastisch deine ausgelesenen werte verfälschen