| Autor | Beitrag | 
| neuronet Hält's aus hier
 Beiträge: 15
 
 Win XP, SCO Unix, Linux
 Delphi 2010 Architect
 
 | 
Verfasst: Do 13.01.11 00: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 01: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 01: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 01: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 01: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 01: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 01: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 01: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 01: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 01: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 01: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 01: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 01: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 02:01 
 
Moin!
 Dann so vielleicht?    		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 
 | typeTIntArray = 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 02: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... | 
|  |