You last visited: Today at 23:00
Advertisement
KDMemory (AutoIt 32 & 64 Bit)
Discussion on KDMemory (AutoIt 32 & 64 Bit) within the AutoIt forum part of the Coders Den category.
08/01/2013, 00:50
#1
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
KDMemory (AutoIt 32 & 64 Bit)
Functions:
Quote:
Originally Posted by KDMemory.au3
_KDMemory_OpenProcess ( $processId [, $inheritHandle [, $desiredAccess]] )
_KDMemory_CloseHandles ( $handles )
_KDMemory_ReadProcessMemory ( $handles, $baseAddress, $type [, $offsets] )
_KDMemory_ReadProcessString( $handles, $baseAddress [, $offsets [, $unicode]] )
_KDMemory_WriteProcessMemory ( $handles, $baseAddress, $type, $value [, $offsets] )
_KDMemory_WriteProcessString ( $handles, $baseAddress, $string [, $offsets [, $unicode]] )
_KDMemory_GetModuleBaseAddress ( $handles, $moduleName [, $caseSensitive [, $unicode]] )
_KDMemory_FindAddress ( $handles, $pattern, $startAddress, $endAddress, ByRef $errors [, $getAll] )
Attached Files
KDMemory.zip
(4.0 KB, 633 views)
KDMemory_Example.zip
(5.7 KB, 515 views)
08/01/2013, 01:18
#2
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Vielen dank
Sowas brauchte ich noch .
aber könntest du mir mal das mit den pointern (offsets) erklären ? ich verstehe grade nicht wie ich die übergeben soll (als array)
edit : wenns in dem example ist sry das hab ich am handy net gesehen und kann es auch net öffnen
08/01/2013, 01:37
#3
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,255
thx,
in der .au3 hast du einen kleinen tippfehler..
zeile 196
EndFuncspoiler]
08/01/2013, 11:59
#4
elite*gold: 0
Join Date: Dec 2012
Posts: 448
Received Thanks: 278
Nice 64bit FTW! xD
08/01/2013, 17:51
#5
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Quote:
Originally Posted by
»FlutterShy™
Vielen dank
Sowas brauchte ich noch .
aber könntest du mir mal das mit den pointern (offsets) erklären ? ich verstehe grade nicht wie ich die übergeben soll (als array)
edit : wenns in dem example ist sry das hab ich am handy net gesehen und kann es auch net öffnen
Die "Example" Datei beinhaltet ein Beispiel.
Code:
#AutoIt3Wrapper_UseX64=y
#RequireAdmin
#include "KDMemory.au3"
If @CPUArch <> "X64" Or @AutoItX64 == 0 Then
MsgBox(48, "Error", "Unsupported system")
Exit
EndIf
$szProcessName = "Tutorial-x86_64.exe"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
MsgBox(48, "Error", "Process doesn't exists!")
Else
$phHandles = _KDMemory_OpenProcess($dwProcessId)
If @error Then
MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
Else
Dim $pdwOffsets[1] = [0]
;~ $lpBaseAddress = Dec("1002C7710") ; AutoIt (SciTe) can't handle hexadecimal values above 0xFFFFFFFF (max 32 bit value)
$lpBaseAddress = _KDMemory_GetModuleBaseAddress($phHandles, $szProcessName) + 0x2C7710 ; not recommended, for testing purposes only (use 'Dec("1002C7710")' instead)
If @error Then
MsgBox(48, "Error", "Can't get ModuleBaseAddress! @error: " & @error & ", @extended: " & @extended)
Else
_KDMemory_WriteProcessMemory($phHandles, $lpBaseAddress, 'DWORD', 5000, $pdwOffsets)
If @error Then MsgBox(48, "Error", "Can't write memory! @error: " & @error & ", @extended: " & @extended)
$lpMemoryData = _KDMemory_ReadProcessMemory($phHandles, $lpBaseAddress, 'DWORD', $pdwOffsets)
If @error Then
MsgBox(48, "Error", "Can't read memory! @error: " & @error & ", @extended: " & @extended)
Else
MsgBox(64, "Info", "Address: " & $lpMemoryData[0] & @CRLF & "Value: " & $lpMemoryData[1])
EndIf
EndIf
_KDMemory_CloseHandle($phHandles)
EndIf
EndIf
Quote:
Originally Posted by
omer36
thx,
in der .au3 hast du einen kleinen tippfehler..
zeile 196
EndFuncspoiler]
Keine Ahnung wann und wie das da rein gerutscht ist. Ich habe den Fehler entfernt und die .au3 noch mal neu hochgeladen.
08/01/2013, 20:27
#6
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,255
komischerweise klappt bei mir die WriteProcessMemory funktion nicht, wenn ich einen pointer verwende (ohne pointer gehts). lesen klappt.
kommt auch keine fehlermeldung.
in deinem beispiel nur die stellen geändert:
$szProcessName = "Solitaire.exe"
Dim $pdwOffsets[2] = [0x50, 0x14]
$lpBaseAddress = _KDMemory_GetModuleBaseAddress($phHandles, $szProcessName) + Dec("BAFA8")
beim starten zeigt er mir die aktuellen punktzahlen des spiels an, ändert diese jedoch nicht in 5000, die vorgegeben waren.
08/01/2013, 21:12
#7
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Evtl. ist es wie beim CE Tutorial (siehe Beispielsscript). Der Wert wurde geändert, jedoch aktualisiert CE diesen Wert nicht, das Label zeigt also weiterhin den alten Wert an.
Klickst du allerdings auf den "Change Pointer" Button und führst anschließend das Script aus, so kannst du anschließend den "Next" Button betätigen.
Du siehst auch, dass es funktioniert, wenn du erst den Wert schreibst und diesen anschließend wieder ausließt. Das könntest du ja mal bei Solitär ausprobieren. Evtl. verwendest du ja auch einfach den falschen Pointer, wobei ich mal nicht davon ausgehe.
Der neue Wert wird übrigens auch bei Solitär nur angezeigt, sobald das Spiel einen Punktestandunterschied erkennt, zum Start wirst du also immer 0 sehen.
08/03/2013, 08:15
#8
elite*gold: 11
Join Date: Jun 2012
Posts: 894
Received Thanks: 1,463
Cooles Ding Danke xD
08/05/2013, 11:01
#9
elite*gold: 0
Join Date: May 2013
Posts: 361
Received Thanks: 60
Bei mir kommt immer das hier, wenn ich deinen Script ausführe.
08/05/2013, 13:45
#10
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Falsche adresse oder #RequireAdmin vergessen
08/05/2013, 15:53
#11
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Quote:
Originally Posted by
KDeluxe
Ich lade mal meine Memory UDF hoch. Diese kann sowohl mit 32 als auch 64 Bit Anwendungen verwendet werden.
Quote:
Originally Posted by
KDeluxe
Code:
If @CPUArch <> "X64" Or @AutoItX64 == 0 Then
MsgBox(48, "Error", "Unsupported system")
Exit
EndIf
Wieso prüfst du auf eine 32bit CPU, wenn es doch sowohl 64
als auch 32 Bit unterstützen soll?
08/05/2013, 18:43
#12
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Quote:
Originally Posted by
Angela_Merkel
Bei mir kommt immer das hier, wenn ich deinen Script ausführe.
Du erstellst zwei Threads in der AutoIt Sektion und zusätzlich einen weiteren Thread im General Coding zu EINEM Thema und postest es auch noch in diesem Thread, obwohl der Fehler an dir liegt und nicht an der UDF.
Quote:
Originally Posted by
Logtetsch
Wieso prüfst du auf eine 32bit CPU, wenn es doch sowohl 64 als auch 32 Bit unterstützen soll?
Da hast du dich verguckt. Ich prüfe ob auf ein 64 Bit System verwendet wird und ob die Anwendung eine 64 Bit Anwendung ist.
Das hat einen einfachen Hintergrund:
eine 32 Bit Applikation kann nicht auf den Speicher einer 64 Bit Applikation zugreifen
auf einem 64 Bit Betriebssystem können 32 Bit Anwendungen ausgeführt werden
Bei dem Zielprozess handelt es sich um eine 64 Bit Anwendung, deshalb die Überprüfung. So kann die Funktionalität meiner UDF garantiert werden, was Beiträge wie "Funktioniert nicht" vermeiden soll (aber nicht kann).
08/05/2013, 20:18
#13
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by
KDeluxe
eine 32 Bit Applikation kann nicht auf den Speicher einer 64 Bit Applikation zugreifen
auf einem 64 Bit Betriebssystem können 32 Bit Anwendungen ausgeführt werden
kann denn eine 64 bit anwendung auf den speicher einer 32 bit anwendung zugreifen ?
08/08/2013, 17:10
#14
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Mit deiner UDF hat das hier nicht funktioniert mit nomad aber schon . Ich habe nichts falsch eingegebn :
Code:
#include <NomadMemory.au3>
HotKeySet("{NUMPADADD}","_WriteAdd")
HotKeySet("{NUMPADSUB}","_WriteSub")
Global $adress = 0x059C0724
Global $processHandle = ProcessExists("iw5m.dat")
Global $hopen = _MemoryOpen($processHandle)
While 1
sleep(100)
WEnd
Func _Read()
$read = _MemoryRead($adress,$hopen , "FLOAT")
EndFunc
Func _WriteSub()
$read = _MemoryRead($adress,$hopen , "FLOAT")
_MemoryWrite($adress,$hopen ,$read - 10, "FLOAT" )
EndFunc
Func _WriteAdd()
$read = _MemoryRead($adress,$hopen , "FLOAT")
_MemoryWrite($adress,$hopen ,$read + 10, "FLOAT" )
EndFunc
08/09/2013, 00:55
#15
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Wenn du das Script hinzufügen würdest, wie du es mit meiner UDF gemacht hast, könnte ich dir helfen.
Hier mal ein Beispiel, wie es funktionieren sollte:
Code:
#AutoIt3Wrapper_UseX64=n
#RequireAdmin
#include "KDMemory.au3"
Dim $szProcessName = "iw5m.dat", $lpBaseAddress = 0x059C0724, $phHandles
HotKeySet("{NUMPADADD}","_WriteAdd")
HotKeySet("{NUMPADSUB}","_WriteSub")
While True
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
If IsArray($phHandles) Then
_KDMemory_CloseHandle($phHandles)
$phHandles = 0
EndIf
Else
If Not IsArray($phHandles) Then
$phHandles = _KDMemory_OpenProcess($dwProcessId)
If @error Then MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
EndIf
EndIf
WEnd
Func _Write($sValue)
If IsArray($phHandles) Then
$sMemValue = _KDMemory_ReadProcessMemory($phHandles, $lpBaseAddress, 'FLOAT')
If @error Then
MsgBox(48, "Error", "Can't read memory! @error: " & @error & ", @extended: " & @extended)
Else
_KDMemory_WriteProcessMemory($phHandles, $lpBaseAddress, 'FLOAT', $sMemValue[1] + $sValue)
If @error Then MsgBox(48, "Error", "Can't write memory! @error: " & @error & ", @extended: " & @extended)
EndIf
EndIf
EndFunc
Func _WriteAdd()
_Write(10)
EndFunc
Func _WriteSub()
_Write(-10)
EndFunc
All times are GMT +1. The time now is 23:01 .