Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 10:50

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



4 Byte in Float konvertieren mit AutoIT

Discussion on 4 Byte in Float konvertieren mit AutoIT within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jun 2012
Posts: 18
Received Thanks: 0
4 Byte in Float konvertieren mit AutoIT

Hi,
Die Variable deren Adresse ich mit Cheat-engine suche ist eine Float variable. Wenn ich die Adresse mit AutoIT einlese interpretiert er es allerdings als 4Byte und bringt ein total falsches Ergebnis. Da man nur Variablen mit dem Typ variant deklarieren kann wollte ich fragen ob man ein 4Byte auch in einen Float umrechnen kann.
cypresse is offline  
Old 06/30/2012, 12:37   #2
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Du ließt den Wert vermutlich über _MemoryRead() oder _MemoryPointerRead() aus. Du musst den Parameter $sv_Type einfach auf "float" ändern, standardmäßig ist dieser "DWORD".

Wenn du ReadProcessMemory per DllCall benutzen solltest, sollte es in etwa so aussehen:
Code:
$lpBuffer = DllStructCreate("float")
DllCall("Kernel32.dll", "int", "ReadProcessMemory", "HANDLE", $hProcess, "DWORD", $dwAddress, "ptr", DllStructGetPtr($lpBuffer), "ULONG_PTR", DllStructGetSize($lpBuffer), "int", 0)
KDeluxe is offline  
Thanks
1 User
Old 06/30/2012, 15:33   #3
 
elite*gold: 0
Join Date: Jun 2012
Posts: 18
Received Thanks: 0
danke
mit welchem befehl muss ich dann die Speicheradresse einlesen?
cypresse is offline  
Old 06/30/2012, 15:53   #4


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Meinst du jetzt die Adresse oder den Wert, auf welche die Adresse zeigt?
Lawliet is offline  
Old 06/30/2012, 16:01   #5
 
elite*gold: 0
Join Date: Jun 2012
Posts: 18
Received Thanks: 0
ich meine welchen befehl muss ich benutzen um die Speicheradresse so auszulesen, das es mir den richtigen Wert (also float) ausgibt.
Muss das _MemoryRead() oder _MemoryPointerRead() oder ReadProcessMemory sein? Ich kenn mich da leider nicht aus
cypresse is offline  
Old 06/30/2012, 16:53   #6
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
_MemoryRead() und _MemoryPointerRead() sind UDFs (User Defined Functions), welche die Benutzung erleichtern sollen.
_MemoryRead() ließt einfach nur den Wert einer Adresse.
_MemoryPointerRead() ermöglicht dir einfaches auslesen eines Pointers, zusätzlich zur Adresse musst du noch Offsets angeben.

Beide Funktionen findest du in der "NomadMemory.au3" bzw. der "Pointer.au3", diese findest du mit Google.
Du musst jeweils den letzten Parameter auf Float setzen:
Code:
$rData = _MemoryRead($ah_Handle, $iv_Address, "float")
KDeluxe is offline  
Old 06/30/2012, 17:19   #7
 
elite*gold: 0
Join Date: Jun 2012
Posts: 18
Received Thanks: 0
ok danke,
bei mir kommt aber immer 0 raus, egal welchen wert die adresse hat.
hier mein code:

#include <NoMadMemory.au3>

$iv_Address = 0x00FBF314
$lpBuffer = DllStructCreate("float")
$hprocess = WinGetProcess("BF2")
DllCall("Kernel32.dll", "int", "ReadProcessMemory", "HANDLE", $hProcess, "DWORD", $iv_Address, "ptr", DllStructGetPtr($lpBuffer), "ULONG_PTR", DllStructGetSize($lpBuffer), "int", 0)
$info = _MemoryOpen($hProcess)
$Data = _MemoryRead($info, $iv_Address, "float")
MsgBox(1,"wert:",$Data)


Was ist daran falsch?
cypresse is offline  
Old 06/30/2012, 18:28   #8
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Den manuellen DllCall() kannst du dir sparen.Wirklich falsch ist nichts, aber gut ist es dennoch nicht. Du solltest zumindest immer überprüfen, ob du ein gültiges Handle hast.

Hier mal ein Beispiel:
Code:
#include <NomadMemory.au3>

$dwAddress = 0x00FBF314
$szProcessName = "BF2.exe"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId > 0 Then
	$Handle = _MemoryOpen($dwProcessId)
	If Not @error Then
		$rData = _MemoryRead($Handle, $dwAddress, "float")
		If @error Then
			MsgBox(48, "Fehler", "Lesen des Speichers fehlgeschlagen." & @CRLF & "Fehlercode: " & @error)
		Else
			MsgBox(64, "Info", "Adresse: " & $dwAddress & @CRLF & "Wert: " & $rData)
		EndIf
	Else
		MsgBox(48, "Fehler", "Auf " & $szProcessName & " konnte nicht zugegriffen werden." & @CRLF & "Fehlercode: " & @error)
	EndIf
Else
	MsgBox(48, "Fehler", "Starte " & $szProcessName)
EndIf
Du kannst das Script ja mal ausführen und schreiben, woran es scheitert.
KDeluxe is offline  
Reply


Similar Threads Similar Threads
8 byte anzeigen in Autoit
08/09/2010 - AutoIt - 3 Replies
hi! hab jetzt 2 Std google hinter mir und nichts sinnvolles gefunden, meine Frage is: Wie kann ich in Autoit 8byte anzeigen lassen dword = 4 byte long = 4 byte int = 4 byte gibts da was für 8 byte? In der nomadmemory steht dazu auch nichts



All times are GMT +1. The time now is 10:51.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.