AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Float-Wert auslesen mithilfe von Readprocessmemory
Thema durchsuchen
Ansicht
Themen-Optionen

Float-Wert auslesen mithilfe von Readprocessmemory

Ein Thema von infY2k7 · begonnen am 7. Jun 2008 · letzter Beitrag vom 23. Apr 2009
Antwort Antwort
infY2k7

Registriert seit: 21. Mai 2008
23 Beiträge
 
#1

Float-Wert auslesen mithilfe von Readprocessmemory

  Alt 7. Jun 2008, 17:57
Hallo, folgendes Problem:
Ich muss einen Wert aus einem Speicher auslesen. Solange der Wert im Format 4 oder 8 Bytes vorliegt, mache ich das mit meiner Funktion f_memoryread:

Delphi-Quellcode:
function f_memoryread(WindowTitle:Pansichar;adresse,size:integer):integer;
var p : pointer;
    puffer : array[0..1] of DWord;
    BytesRead: DWord;
    WindowName,ProcessId,ThreadId,HandleWindow : integer;
   begin
        p := ptr(adresse); //Adresse umwandeln:
        WindowName := FindWindow(nil,WindowTitle); //get Handle
        ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
        HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
        ReadProcessMemory( HandleWindow, p , @puffer[0], size, BytesRead );
        closehandle(HandleWindow);//close
        f_memoryread := Puffer[0];
   end;//of f_memoryread
In Cheat-Engine kann man den Typ eines Wertes einstellen, siehe Bild:

http://1337files.13.funpic.de/Unbenannt-1.jpg

Wenn ich hier 4Byte wähle, ist der Wert "1149107790". Wenn ich jedoch Float auswähle, ist der Wert "1015,97351074219"!

Den 4Byte Wert dieser Adresse (1149107790) auszulesen ist mit der o.g. Funktion kein Problem, jedoch brauch ich den Float-Wert! Für die variable size einfach "float" statt "4" oder "8" zu schreiben, funktioniert nicht!

Weiß jemand, wie ich diesen auslese? Oder gibts eine Funktion, mit der man 4Bytes in Float umwandeln kann? Dann könnte ich den Wert ganz normal auslesen und anschließend einfach umwandeln.

Bitte um Hilfe, mfg infY
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Float-Wert auslesen mithilfe von Readprocessmemory

  Alt 7. Jun 2008, 19:26
Hallo,

ich würde es mal mit dem reellen Typ "Single" probieren. Der belegt übrigens 4 Byte.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von zarcaphii
zarcaphii

Registriert seit: 7. Jun 2008
28 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Float-Wert auslesen mithilfe von Readprocessmemory

  Alt 7. Jun 2008, 20:10
Zitat von infY2k7:
Für die variable size einfach "float" statt "4" oder "8" zu schreiben, funktioniert nicht!
Auch nicht SizeOf(Float)?
  Mit Zitat antworten Zitat
infY2k7

Registriert seit: 21. Mai 2008
23 Beiträge
 
#4

Re: Float-Wert auslesen mithilfe von Readprocessmemory

  Alt 8. Jun 2008, 13:49
Zitat von marabu:
Hallo,

ich würde es mal mit dem reellen Typ "Single" probieren. Der belegt übrigens 4 Byte.

Grüße vom marabu
Habs mal so Probiert:
ReadProcessMemory(HandleWindow,pointer(p),@ausgabe,single,BytesRead); Jedoch dann kommt die Fehlermeldung:"E2029 '(' erwartet,aber ',' gefunden"!
Mit sizeof(single) gehts, aber da kommt auch nur dieser normale 4 Byte Wert raus(1149107790)!

Zitat von zarcaphii:
Zitat von infY2k7:
Für die variable size einfach "float" statt "4" oder "8" zu schreiben, funktioniert nicht!
Auch nicht SizeOf(Float)?
Ne, geht auch nicht:
ReadProcessMemory(HandleWindow,pointer(p),@ausgabe,sizeof(float),BytesRead); Fehler:"E2003 Undefinierter Bezeichner 'float'!

Hat noch jemand eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Float-Wert auslesen mithilfe von Readprocessmemory

  Alt 8. Jun 2008, 13:58
wenn du deinen 4 Byte Fließkommawert lesen willst solltest du dir in Delphi den entsprechenden Typen heraus suchen. Das er in Delphi nicht Float heißt sollte doch nicht das Problem sein.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
infY2k7

Registriert seit: 21. Mai 2008
23 Beiträge
 
#6

Re: Float-Wert auslesen mithilfe von Readprocessmemory

  Alt 8. Jun 2008, 14:04
Zitat von SirThornberry:
wenn du deinen 4 Byte Fließkommawert lesen willst solltest du dir in Delphi den entsprechenden Typen heraus suchen. Das er in Delphi nicht Float heißt sollte doch nicht das Problem sein.
Ja genau da ist mein Problem ich weiß nicht welchen Typ ich nehmen soll =.=
  Mit Zitat antworten Zitat
infY2k7

Registriert seit: 21. Mai 2008
23 Beiträge
 
#7

Re: Float-Wert auslesen mithilfe von Readprocessmemory

  Alt 8. Jun 2008, 14:09
Okay, mit single gehts doch! Für die, die dasselbe Problem haben hier mal meine Funktion:

Delphi-Quellcode:
function f_memoryreadfloat(WindowTitle:Pansichar;adresse:integer):single;
var p : pointer;
    puffer : single;
    BytesRead: DWord;
    WindowName,ProcessId,ThreadId,HandleWindow : integer;
   begin
        p := ptr(adresse); //Adresse umwandeln:
        WindowName := FindWindow(nil,WindowTitle); //get Handle
        ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
        HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
        ReadProcessMemory( HandleWindow, p , @puffer,sizeof(single), BytesRead ); //READ
        closehandle(HandleWindow);//close
        f_memoryreadfloat := Puffer;
   end;//of f_memoryread
puffer : single hatte ich vorher vergessen!

danke für eure hilfe mfg infY!!
  Mit Zitat antworten Zitat
Troelli

Registriert seit: 1. Mai 2003
15 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Float-Wert auslesen mithilfe von Readprocessmemory

  Alt 23. Apr 2009, 15:05
Sorry das ich den hier nochmal raushole ...
Aber hat das mal einer probiert?
Bei
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
bekomme ich Grundsätzlich eine 0 also kein handle.
(Ich bin mir sicher das ich richtige ProcessID habe)

Ich würde mir gerne Infos aus einen Spiel saugen, lesenderweise.
Aber wie ichs auch versuche ... es bleibt bei 0 und ich bekomme nix aus dem Memory.
Das Beispiel passt vorzüglich zu mir wegen dem Float.
Hat da jemand eine Idee woran das liegen könnte?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz