Autor |
Beitrag |
neuronet
Hält's aus hier
Beiträge: 15
Win XP, SCO Unix, Linux
Delphi 2010 Architect
|
Verfasst: Do 13.01.11 01:37
Ich glaub ich hab heute irgendwie nen Brett vorm Kopp...
Ich hab 'ne .INI in folgendem Format:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| [Character_Offset] $CharacterOffset = 0x568
[Life] $Static = 0x016BFAD4 $Offset_1 = 0x7B8 $Offset_2 = 0xC $Offset_3 = 0x30 $Offset_4 = 0x24C8
[Mana] $Static = 0x016BFAD4 $Offset_1 = 0x7B8 $Offset_2 = 0xC $Offset_3 = 0x30 $Offset_4 = 0x24CC
[Exp] $Static = 0x016BFAD4 $Offset_1 = 0x7B8 $Offset_2 = 0xC $Offset_3 = 0x30 $Offset_4 = 0x24B8 |
Die einzelnen "Sections" sind vom Namen her bekannt und sollen jeweils in ein 1D-Array eingelesen werden, um mit der folgenden Funktion ausgewertet werden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function PointerSolve(Process: THandle; p_array: array of integer):integer; var pointercount: integer; i: integer; base_addr: integer; temp: integer; Wert:DWORD ; begin pointercount:=length(p_array); base_addr:=p_array[0]; for I := 1 to pointercount-1 do begin ReadProcessMemory(Process, ptr(base_addr), @temp, 4, Wert); base_addr:= temp + p_array[i]; end; result:=base_addr; end; |
Irgendwie raff ichs grad net die INI auszulesen...

|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 13.01.11 02:02
Moin!
neuronet hat folgendes geschrieben : | Die einzelnen "Sections" sind vom Namen her bekannt und sollen jeweils in ein 1D-Array eingelesen werden, um mit der folgenden Funktion ausgewertet werden: |
Was hat denn der Code mit der INI-Datei zu tun?
neuronet hat folgendes geschrieben : | Irgendwie raff ichs grad net die INI auszulesen... |
Wo ist denn das Problem, notfalls Umgangssprachlich beschrieben?  Ist die INI immer so aufgebaut, bekannter (=konstanter) Section-Name und Keys?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
neuronet 
Hält's aus hier
Beiträge: 15
Win XP, SCO Unix, Linux
Delphi 2010 Architect
|
Verfasst: Do 13.01.11 02:15
Der Code soll nur veranschaulichen, wie das array weiterverarbeitet wird, also dass ich die variablennamen in den sections keinesfalls mit drin haben darf.
Die sections sind immer so aufgebaut. mal mit mehr und mal mit weniger variablen.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 13.01.11 02:24
Moin!
neuronet hat folgendes geschrieben : | Die sections sind immer so aufgebaut. mal mit mehr und mal mit weniger variablen. |
Kriegst du die Dateien geliefert oder ist das deine Kreation? (zielt darauf ab, ob man die auch noch etwas ändern könnte)
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
neuronet 
Hält's aus hier
Beiträge: 15
Win XP, SCO Unix, Linux
Delphi 2010 Architect
|
Verfasst: Do 13.01.11 02:27
Der INI-Aufbau kann ggf. geändert werden.
Die INI wird eh nur durch ein script aus ner Cheat-Engine XML Tabelle generiert....
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 13.01.11 02:32
Moin!
Dann würde ich vorschlagen, das so zu machen:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| [Character_Offset] $CharacterOffset = 0x568
[Life] $Static = 0x016BFAD4 $Offset_count = 4 $Offset_1 = 0x7B8 $Offset_2 = 0xC $Offset_3 = 0x30 $Offset_4 = 0x24C8 | Damit sollte es dann recht einfach sein.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
neuronet 
Hält's aus hier
Beiträge: 15
Win XP, SCO Unix, Linux
Delphi 2010 Architect
|
Verfasst: Do 13.01.11 02:36
Hmmm. Die Anzahl der Offsets kriege ich ja ggf. über length(array) raus..
Das war mir grad partout nich innen kopp geht is, wie ich nun die werte allgemein in ein eindimensionales array reinkriege... also nur die werte der variablen ohne den bezeichner davor.
mit IniFiles.Tinifile.readsection liest er mir ja auch die variablenbezeichner mit ein...
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 13.01.11 02:40
Moin!
neuronet hat folgendes geschrieben : | Hmmm. Die Anzahl der Offsets kriege ich ja ggf. über length(array) raus.. |
Ja, aber erst, wenn du die INI-Datei schon gelesen hast.
neuronet hat folgendes geschrieben : | Das war mir grad partout nich innen kopp geht is, wie ich nun die werte allgemein in ein eindimensionales array reinkriege... also nur die werte der variablen ohne den bezeichner davor. |
Du musst in einer Schleife die Key-Namen erzeugen und einzeln lesen, deshalb ja das Count.
neuronet hat folgendes geschrieben : | mit IniFiles.Tinifile.readsection liest er mir ja auch die variablenbezeichner mit ein... |
Damit kommst du hier nicht weiter. Sofern die Section-Namen wirklich bekannt sind...  (wenn es darum geht, dass auch die Sections als Daten anzusehen sind und unklar ist, welche Sections in einer INI sind, dann solltest du die INI-Datei ganz anders aufbauen - und dich auch gleich fragen, ob das INI-Format dafür überhaupt geeignet ist)
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
neuronet 
Hält's aus hier
Beiträge: 15
Win XP, SCO Unix, Linux
Delphi 2010 Architect
|
Verfasst: Do 13.01.11 02:43
Für Konstruktive vorschläge bin ich immer zu haben...
Der Dateiaufbau selber ist mir eigentlich wurscht, da ich diese über ein script selber erzeuge.
nur muss ich die werte eben iwie jeweils in ein array reinbekommen um die aktuelle speicheradresse berechnen zu können (und ggf. einzelne offsets zu manipulieren).
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 13.01.11 02:47
Moin!
Wat is denn nu mit den Sections, sind das immer nur "Life, Mana, Exp" oder werden die Section-Namen hier (mal wieder) als Datenlager missbraucht?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
neuronet 
Hält's aus hier
Beiträge: 15
Win XP, SCO Unix, Linux
Delphi 2010 Architect
|
Verfasst: Do 13.01.11 02:49
Die Section-Namen Bezeichnen eigentlich nur die Pointer Arrays.
Jede Section enthält Static- und Offsets von Speicheradressen, die dynamisch berechnet werden müsssen...
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 13.01.11 02:50
Narses hat folgendes geschrieben : | sind das immer nur "Life, Mana, Exp" |
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
neuronet 
Hält's aus hier
Beiträge: 15
Win XP, SCO Unix, Linux
Delphi 2010 Architect
|
Verfasst: Do 13.01.11 02:52
Ach so...
Nein.. gibt auch noch andere, aber die sind alle immer gleich, also ändern sich nicht.
Also Life, Mana, Exp, Char_1_Invi_1, Bank_X, Map_X...
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 13.01.11 03:01
Moin!
Dann so vielleicht?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type TIntArray = array of Integer;
function GetIntArrayFromIni(AIniFile: TIniFile; const ASection: String): TIntArray; var i, len: Integer; begin len := StrToIntDef(AIniFile.ReadString(ASection, '$Offset_count', ''), 0); SetLength(Result, len); for i := 1 to len do Result[i-1] := StrToIntDef(AIniFile.ReadString(ASection, Format('$Offset_%d', [i]), ''), 0); end; | Wobei ich gerade unsicher bin, ob StrToIntX() mit der '0x'-Notation was anfangen kann, ggfs. durch '$' ersetzen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
neuronet 
Hält's aus hier
Beiträge: 15
Win XP, SCO Unix, Linux
Delphi 2010 Architect
|
Verfasst: Do 13.01.11 03:26
Gute Idee.. aber ich sagte ja.. Brett vor Kopp...
INI Datei so ändern:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| [Life] $016BFAD4 $7B8 $C $30 $24C8
[Mana] $016BFAD4 $7B8 $C $30 $24CC |
dann mit readsection einlesen und mit der folgenden funktion in ein normales array umpacken...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| function CopyListToArray(List: TStringList): TStringArray; var nCount: Integer; begin SetLength(result, List.Count);
for nCount := Low(result) to High(result) do result[nCount] := List.Strings[nCount]; end; |
und die berechnungsfunktion um nen strtoint ergänzen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function PointerSolve(Process: THandle; p_array: array of string):integer; var pointercount: integer; i: integer; base_addr: integer; temp: integer; Wert:DWORD ; begin pointercount:=length(p_array); base_addr:=stritoint(p_array[0]); for I := 1 to pointercount-1 do begin ReadProcessMemory(Process, ptr(base_addr), @temp, 4, Wert); base_addr:= temp + strtoint(p_array[i]); end; result:=base_addr; end; |
P.S.: StrToInt kennt auch die 0x Notation...
Trotzdem vielen Dank Narses...
|
|