Actually thats partially wrong because Pointer.au3 contains the function _MemoryPointerRead and NomadMemory.au3 does not contain it.
It would be smarter delete the #include <NomadMemory.au3> than deleting the other UDF which contains the function which is not in the other UDF.
Remove the Pointer.au3 import..
also, it's SetPrivilege("SetDebugPrivilege", 1)
He should remove the NomadMemory include instead of the Pointer.au3 include.
It's 'SeDebugPrivilege' and not 'SetDebugPrivilege' ().
Jetzt noch was zum eigentlichen Thema. Wie alpines schon richtig gesagt hat musst du eigentlich nur die Zeile mit dem NomadMemory.au3 Include entfernen.
"SeDebugPrivilege" wird nicht benötigt. Dafür aber Adminrechte. Deshalb solltest du #RequireAdmin in deinem Script hinzufügen (am einfachsten in die 1. Zeile).
Zeile 10 bis 16 ist Blödsinn. Das hätte man zum einen in einer Zeile lösen können und zum anderen performanter. Du speicherst deine Offsets in einem String und lässt diesen in eine Dezimalzahl umrechnen. Das kostet Performance. Du kannst du Offsets einfach gleich als Hexadezimalzahl angeben, dann wird auch keine Rechenoperation gebraucht.
Zeile 20 bis 31 sind komplett sinnlos. Angefangen dabei, dass du der Funktion _ReturnMemoryValue() nicht die Adresse sondern den Wert der Adresse übergibst. Hier gibt es nur lesenden Zugriff, da du mit dem resultierenden Wert ($Awert) nicht weiterarbeitest ist es aber wie schon geschrieben komplett sinnlos. Was die Funktion letzten Endes macht sieht auch unsinnig aus, aber darüber möchte ich nicht Urteilen.
Außerdem solltest du dich daran gewöhnen, dass die Funktionen auch einen Fehlercode zurückgeben. Diese Fehler solltest du auch behandeln. In deinem aktuellen Script gibt es für die Anzahl an Zeilen viele theoretischer Stellen, an der deine Anwendung einfach "abschmieren" kann.
Bei Metin2 wird die Verwendung der NomadMemory.au3/Pointer.au3 dir zwar nicht das Genick brechen, ich empfehle dir dennoch mal . Einer der netten Herren hier wird wahrscheinlich etwas "negatives" über meine UDF schreiben, lass dich davon aber nicht beirren. Du wirst außerdem nicht so viel für C&P finden. Deinem aktuellen Script nach zu urteilen war das nämlich bisher deine größte Aufgabe. Ich könnte dein Script aber entsprechend anpassen.
He should remove the NomadMemory include instead of the Pointer.au3 include.
I don't have the Pointer.au3 by def. fellas. I'm just going to assume it's an external lib like the NomadMEM.
Quote:
Originally Posted by KDeluxe
It's 'SeDebugPrivilege' and not 'SetDebugPrivilege' ()
oh ok.
Quote:
Originally Posted by KDeluxe
Jetzt noch was zum eigentlichen Thema. Wie alpines schon richtig gesagt hat musst du eigentlich nur die Zeile mit dem NomadMemory.au3 Include entfernen.
"SeDebugPrivilege" wird nicht benötigt. Dafür aber Adminrechte. Deshalb solltest du #RequireAdmin in deinem Script hinzufügen (am einfachsten in die 1. Zeile).
Zeile 10 bis 16 ist Blödsinn. Das hätte man zum einen in einer Zeile lösen können und zum anderen performanter. Du speicherst deine Offsets in einem String und lässt diesen in eine Dezimalzahl umrechnen. Das kostet Performance. Du kannst du Offsets einfach gleich als Hexadezimalzahl angeben, dann wird auch keine Rechenoperation gebraucht.
Zeile 20 bis 31 sind komplett sinnlos. Angefangen dabei, dass du der Funktion _ReturnMemoryValue() nicht die Adresse sondern den Wert der Adresse übergibst. Hier gibt es nur lesenden Zugriff, da du mit dem resultierenden Wert ($Awert) nicht weiterarbeitest ist es aber wie schon geschrieben komplett sinnlos. Was die Funktion letzten Endes macht sieht auch unsinnig aus, aber darüber möchte ich nicht Urteilen.
Außerdem solltest du dich daran gewöhnen, dass die Funktionen auch einen Fehlercode zurückgeben. Diese Fehler solltest du auch behandeln. In deinem aktuellen Script gibt es für die Anzahl an Zeilen viele theoretischer Stellen, an der deine Anwendung einfach "abschmieren" kann.
Bei Metin2 wird die Verwendung der NomadMemory.au3/Pointer.au3 dir zwar nicht das Genick brechen, ich empfehle dir dennoch mal . Einer der netten Herren hier wird wahrscheinlich etwas "negatives" über meine UDF schreiben, lass dich davon aber nicht beirren. Du wirst außerdem nicht so viel für C&P finden. Deinem aktuellen Script nach zu urteilen war das nämlich bisher deine größte Aufgabe. Ich könnte dein Script aber entsprechend anpassen.
I just love how you called me a gentleman. There is a reason why you won't find a C&P source using your base.. it's because no one uses it
Quote:
Originally Posted by alpines
Actually thats partially wrong because Pointer.au3 contains the function _MemoryPointerRead and NomadMemory.au3 does not contain it.
It would be smarter delete the #include <NomadMemory.au3> than deleting the other UDF which contains the function which is not in the other UDF.
;=================================================================================================
; Function: _MemoryPointerRead ($iv_Address, $ah_Handle, $av_Offset[, $sv_Type])
; Description: Reads a chain of pointers and returns an array containing the destination
; address and the data at the address.
; Parameter(s): $iv_Address - The static memory address you want to start at. It must be in
; hex format (0x00000000).
; $ah_Handle - An array containing the Dll handle and the handle of the open
; process as returned by _MemoryOpen().
; $av_Offset - An array of offsets for the pointers. Each pointer must have an
; offset. If there is no offset for a pointer, enter 0 for that
; array dimension.
; $sv_Type - (optional) The "Type" of data you intend to read at the destination
; address. This is set to 'dword'(32bit(4byte) signed integer) by
; default. See the help file for DllStructCreate for all types.
; Requirement(s): The $ah_Handle returned from _MemoryOpen.
; Return Value(s): On Success - Returns an array containing the destination address and the value
; located at the address.
; On Failure - Returns 0
; @Error - 0 = No error.
; 1 = $av_Offset is not an array.
; 2 = Invalid $ah_Handle.
; 3 = $sv_Type is not a string.
; 4 = $sv_Type is an unknown data type.
; 5 = Failed to allocate the memory needed for the DllStructure.
; 6 = Error allocating memory for $sv_Type.
; 7 = Failed to read from the specified process.
; Author(s): Nomad
; Note(s): Values returned are in Decimal format, unless a 'char' type is selected.
; Set $av_Offset like this:
; $av_Offset[0] = NULL (not used)
; $av_Offset[1] = Offset for pointer 1 (all offsets must be in Decimal)
; $av_Offset[2] = Offset for pointer 2
; etc...
; (The number of array dimensions determines the number of pointers)
;=================================================================================================
Func _MemoryPointerRead($iv_Address, $ah_Handle, $av_Offset, $sv_Type = 'dword')
If IsArray($av_Offset) Then
If IsArray($ah_Handle) Then
Local $iv_PointerCount = UBound($av_Offset) - 1
Else
SetError(2)
Return 0
EndIf
Else
SetError(1)
Return 0
EndIf
Local $iv_Data[2], $i
Local $v_Buffer = DllStructCreate('dword')
For $i = 0 To $iv_PointerCount
If $i = $iv_PointerCount Then
$v_Buffer = DllStructCreate($sv_Type)
If @error Then
SetError(@error + 2)
Return 0
EndIf
$iv_Address = '0x' & Hex($iv_Data[1] + $av_Offset[$i])
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @error Then
SetError(7)
Return 0
EndIf
$iv_Data[1] = DllStructGetData($v_Buffer, 1)
ElseIf $i = 0 Then
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @error Then
SetError(7)
Return 0
EndIf
$iv_Data[1] = DllStructGetData($v_Buffer, 1)
Else
$iv_Address = '0x' & Hex($iv_Data[1] + $av_Offset[$i])
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @error Then
SetError(7)
Return 0
EndIf
$iv_Data[1] = DllStructGetData($v_Buffer, 1)
EndIf
Next
$iv_Data[0] = $iv_Address
Return $iv_Data
EndFunc ;==>_MemoryPointerRead
;=================================================================================================
; Function: _MemoryPointerWrite ($iv_Address, $ah_Handle, $av_Offset, $v_Data[, $sv_Type])
; Description: Reads a chain of pointers and writes the data to the destination address.
; Parameter(s): $iv_Address - The static memory address you want to start at. It must be in
; hex format (0x00000000).
; $ah_Handle - An array containing the Dll handle and the handle of the open
; process as returned by _MemoryOpen().
; $av_Offset - An array of offsets for the pointers. Each pointer must have an
; offset. If there is no offset for a pointer, enter 0 for that
; array dimension.
; $v_Data - The data to be written.
; $sv_Type - (optional) The "Type" of data you intend to write at the destination
; address. This is set to 'dword'(32bit(4byte) signed integer) by
; default. See the help file for DllStructCreate for all types.
; Requirement(s): The $ah_Handle returned from _MemoryOpen.
; Return Value(s): On Success - Returns the destination address.
; On Failure - Returns 0.
; @Error - 0 = No error.
; 1 = $av_Offset is not an array.
; 2 = Invalid $ah_Handle.
; 3 = Failed to read from the specified process.
; 4 = $sv_Type is not a string.
; 5 = $sv_Type is an unknown data type.
; 6 = Failed to allocate the memory needed for the DllStructure.
; 7 = Error allocating memory for $sv_Type.
; 8 = $v_Data is not in the proper format to be used with the
; "Type" selected for $sv_Type, or it is out of range.
; 9 = Failed to write to the specified process.
; Author(s): Nomad
; Note(s): Data written is in Decimal format, unless a 'char' type is selected.
; Set $av_Offset like this:
; $av_Offset[0] = NULL (not used, doesn't matter what's entered)
; $av_Offset[1] = Offset for pointer 1 (all offsets must be in Decimal)
; $av_Offset[2] = Offset for pointer 2
; etc...
; (The number of array dimensions determines the number of pointers)
;=================================================================================================
Func _MemoryPointerWrite ($iv_Address, $ah_Handle, $av_Offset, $v_Data, $sv_Type = 'dword')
If IsArray($av_Offset) Then
If IsArray($ah_Handle) Then
Local $iv_PointerCount = UBound($av_Offset) - 1
Else
SetError(2)
Return 0
EndIf
Else
SetError(1)
Return 0
EndIf
Local $iv_StructData, $i
Local $v_Buffer = DllStructCreate('dword')
For $i = 0 to $iv_PointerCount
If $i = $iv_PointerCount Then
$v_Buffer = DllStructCreate($sv_Type)
If @Error Then
SetError(@Error + 3)
Return 0
EndIf
DllStructSetData($v_Buffer, 1, $v_Data)
If @Error Then
SetError(8)
Return 0
EndIf
$iv_Address = '0x' & hex($iv_StructData + $av_Offset[$i])
DllCall($ah_Handle[0], 'int', 'WriteProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @Error Then
SetError(9)
Return 0
Else
Return $iv_Address
EndIf
ElseIf $i = 0 Then
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @Error Then
SetError(3)
Return 0
EndIf
$iv_StructData = DllStructGetData($v_Buffer, 1)
Else
$iv_Address = '0x' & hex($iv_StructData + $av_Offset[$i])
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @Error Then
SetError(3)
Return 0
EndIf
$iv_StructData = DllStructGetData($v_Buffer, 1)
EndIf
Next
EndFunc
He should remove the NomadMemory include instead of the Pointer.au3 include.
It's 'SeDebugPrivilege' and not 'SetDebugPrivilege' ().
Jetzt noch was zum eigentlichen Thema. Wie alpines schon richtig gesagt hat musst du eigentlich nur die Zeile mit dem NomadMemory.au3 Include entfernen.
"SeDebugPrivilege" wird nicht benötigt. Dafür aber Adminrechte. Deshalb solltest du #RequireAdmin in deinem Script hinzufügen (am einfachsten in die 1. Zeile).
Zeile 10 bis 16 ist Blödsinn. Das hätte man zum einen in einer Zeile lösen können und zum anderen performanter. Du speicherst deine Offsets in einem String und lässt diesen in eine Dezimalzahl umrechnen. Das kostet Performance. Du kannst du Offsets einfach gleich als Hexadezimalzahl angeben, dann wird auch keine Rechenoperation gebraucht.
Zeile 20 bis 31 sind komplett sinnlos. Angefangen dabei, dass du der Funktion _ReturnMemoryValue() nicht die Adresse sondern den Wert der Adresse übergibst. Hier gibt es nur lesenden Zugriff, da du mit dem resultierenden Wert ($Awert) nicht weiterarbeitest ist es aber wie schon geschrieben komplett sinnlos. Was die Funktion letzten Endes macht sieht auch unsinnig aus, aber darüber möchte ich nicht Urteilen.
Außerdem solltest du dich daran gewöhnen, dass die Funktionen auch einen Fehlercode zurückgeben. Diese Fehler solltest du auch behandeln. In deinem aktuellen Script gibt es für die Anzahl an Zeilen viele theoretischer Stellen, an der deine Anwendung einfach "abschmieren" kann.
Bei Metin2 wird die Verwendung der NomadMemory.au3/Pointer.au3 dir zwar nicht das Genick brechen, ich empfehle dir dennoch mal . Einer der netten Herren hier wird wahrscheinlich etwas "negatives" über meine UDF schreiben, lass dich davon aber nicht beirren. Du wirst außerdem nicht so viel für C&P finden. Deinem aktuellen Script nach zu urteilen war das nämlich bisher deine größte Aufgabe. Ich könnte dein Script aber entsprechend anpassen.
danke für die Antwort , könntest du mir eventuell zeigen, wie das ganze aussehen muss wenn ich es mache wie du es beschrieben hast? bin mir nicht sicher ob es richtig ist
AutoIT Memory 2 04/23/2012 - AutoIt - 2 Replies Kann mir wer die Memory 2 schicken also ihr wisst schon
# include Memory 2 das ding =)
AutoIT Bot über Memory? 12/30/2010 - AutoIt - 15 Replies Morgen =3,
Ich hab gehört, dass es eine Möglichkeit geben soll, Bots über die Memory zu schreiben. Leider hab ich keeinen Dunzt wie das gehen soll. Googel hat mir auch nicht viel dazu gesagt.
Bitte klärt mich auf!
u_failed
Memory Bot Rom in Autoit Problem 01/26/2009 - General Gaming Discussion - 3 Replies Hi,
ich arbeite gerade an einem neuen Bot.
Leider bekomme ich keine richtige Ausgabe wenn ich das Offset addiere, oder ich mache etwas falsch.
$hp ist der aktuelle Wert in der Umgebung ohne Pointer
Wenn ich diesen auslese kommt mein richtiges Leben auch raus.
$pointer ist der pointer und $offset dazu war 31C habe ich mal zu 0x gemacht damit Autoit nicht meckert.
wenn ich $pointer + $offset mache dann gibts in der Msgbox eine 0.
Memory Read in autoit 01/02/2009 - CO2 Programming - 2 Replies Something is wrong when I use this macro. AutoIt alwais get a positive answer for every memory read, even if the answer is negative. #include <NomadMemory.au3>
$paused1 = 1
While $paused1 = 1
$pos2 = MouseGetPos()
$sleep = 350
$Mem_Answer1 = 0x0168DFBC
$Mem_Answer2 = 0x0168E0F4
$Mem_Answer3 = 0x0168E22C
$Mem_Answer4 = 0x0168E364
$Process1 = WinGetProcess("")