|
You last visited: Today at 10:50
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.
06/30/2012, 12:16
|
#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.
|
|
|
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)
|
|
|
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?
|
|
|
06/30/2012, 15:53
|
#4
|
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?
|
|
|
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
|
|
|
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")
|
|
|
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?
|
|
|
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.
|
|
|
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.
|
|