Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 04:32

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

Advertisement



_Memory funktionen auf Win7 64Bit

Discussion on _Memory funktionen auf Win7 64Bit within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1



 
Asuramaru's Avatar
 
elite*gold: 20
The Black Market: 110/0/0
Join Date: Nov 2009
Posts: 2,256
Received Thanks: 1,570
_Memory funktionen auf Win7 64Bit

Hallöle
Ich hab seid neuem nun Win7 64Bit, und musste feststellen das ich nicht wie gewohnt die NomadMemory.au3 nutzen kann.

Weder "_MemoryRead" noch "_MemoryPointerRead" geben mir ein richtiges Ergebniss raus.

auch die Verwendung von "SetPrivilege("SetDebugPrivilege",1)" brachte keinen Erfolg.

_MemoryPointerRead gibt mir außerdem die Adresse "0x00000000" zurück.
(Offsets etc. auch schon versucht zu tauschen, aber da es auf WinXP funktioniert hat muss es an was anderem liegen)



Außerdem wollte die AutoIT installation wohl nicht so
Ich kriege kein Contextmenü im Explorer für die au3 Dateien.
Sprich ist muss alles in Scite machen (Run, Compile)
Asuramaru is offline  
Old 12/29/2011, 15:15   #2
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
autoit funktioniert unter 64bit systemen genauso gut, wie unter 32 bit systemen.

du solltest vielleicht überlegen, einfach selbst funktionen zur speichermanipulation zu schreiben, da die nomad udf ohnehin ausschließlig auf die winapis zugreifen.

der vorteil hier liegt darinn, das du die funktionen selbst denen bedürfnissen anpassen kannst.

hier mal ein kleines beispiel für die grundfunktionen:
Code:
Func OpenProcess($pid)
	Local $mid = DllCall('kernel32.dll', 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', 1, 'int', $pid)
	Return $mid[0]
EndFunc

Func WriteProcessMemory($process_hwnd, $adress, $data, $type = 'dword')
	Local $struct = DllStructCreate($type)
	DllStructSetData($struct, 1, $data)
	DllCall('kernel32.dll', 'int', 'WriteProcessMemory', 'int', $process_hwnd, 'int', $adress, 'int', DllStructGetPtr($struct), 'int', DllStructGetSize($struct), 'int', 0)
EndFunc

Func ReadProcessMemory($process_hwnd, $adress, $type = 'dword')
	Local $struct = DllStructCreate($type)
	DllCall('kernel32.dll', 'int', 'ReadProcessMemory', 'int', $process_hwnd, 'int', $adress, 'ptr', DllStructGetPtr($struct), 'int', DllStructGetSize($struct), 'int', '')
	Return DllStructGetData($struct, 1)
EndFunc

Func CloseHandle($hwnd)
	DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $hwnd)
EndFunc
lolkop is offline  
Thanks
2 Users
Old 12/29/2011, 16:46   #3



 
Asuramaru's Avatar
 
elite*gold: 20
The Black Market: 110/0/0
Join Date: Nov 2009
Posts: 2,256
Received Thanks: 1,570
Hab mir die NomadMemory.au3 nochmal angeguckt, und die nutzt doch auch die Kernel32.dll, weshalb mich etwas wundert wieso dein Beispiel funktioniert aber die Funktion in der Nomadmemory nicht.
(Ist nur etwas länger mit @error abfragen)

Hättest du denn auchnoch ein Beispiel für die Pointer?
Asuramaru is offline  
Old 12/29/2011, 17:13   #4
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Schau dir einfach an, was ein Pointer ist. Dafür braucht mein keine extra Funktion.

Da in der Regel ein Pointer für viele Offsets genutzt wird, ist es extrem ineffizient diesen Pointer jedes mal wieder neu auszulesen.
lolkop is offline  
Thanks
1 User
Old 12/29/2011, 18:17   #5



 
Asuramaru's Avatar
 
elite*gold: 20
The Black Market: 110/0/0
Join Date: Nov 2009
Posts: 2,256
Received Thanks: 1,570
Wie soll ich denn einen Pointer auslesen wenn ich nicht weiß worauf dieser zeigt?
Alles was ich finde ist das ein Pointer ein "Zeiger" ist.
Hat mir aber im Grunde nicht geholfen, da ich trotzdem nicht weiß wie ich mithilfe der Offsets und den gegeben Funktionen nun auf die richtige Adresse kommen soll.
Asuramaru is offline  
Old 12/29/2011, 19:13   #6
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
ein pointer zeigt auf einen speicherbereich. genauer genommen zeigt er auf den beginn eines speicherbereichs.

angenommen im speicher steht ein integer array mit 4 elementen (1,2,3,4).
integer bedeutet, das jeder eintrag im array genau 4 byte groß ist.

nehmen wir an, das array steht in der adresse 0x12345678.
im speicher sieht das ganze dann etwa so aus:
Code:
|    1    | |    2    | |    3    | |    4    |
01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00
nun hast du einen pointer gefunden der auf dieses array, bzw genauer gesagt auf das erste element dieses arrays zeigt.

dein pointer befindet sich zb an der stelle 0x1000 im speicher.

liest du jetzt 0x1000 aus, per ReadProcessMemory, so befindet sich darin die adresse, an welcher das array beginnt (0x12345678).

willst du jetzt das 3te element des arrays auslesen, so musst du nun das offset zum ausgelesenen wert hinzu addieren. da es sich um int werte handelt, ist jeder eintrag 4 byte vom vorherigen entfernt.

darauf würde sich folgender code ergeben:
Code:
$hwnd = OpenProcess(<prozess_id>)
$pointer = ReadProcessMemory($hwnd, 0x1000)
$array1 = ReadProcessMemory($hwnd, $pointer+0)
$array2 = ReadProcessMemory($hwnd, $pointer+4)
$array3 = ReadProcessMemory($hwnd, $pointer+8)
$array4 = ReadProcessMemory($hwnd, $pointer+12)
CloseHandle($hwnd)
die offsets werden also einfach auf die durch den pointer gegebene adresse addiert, und bilden die neue auszulesende adresse.
lolkop is offline  
Thanks
3 Users
Reply


Similar Threads Similar Threads
Pointer.au3 funktionen auf 64Bit
11/24/2011 - AutoIt - 4 Replies
Global $OffsetFee = Global $Static = Dec("244AFC") $MemOpen = _MemoryOpen(ProcessExists("NostaleX.dat" )) $BaseAddr = _MemoryGetBaseAddress($MemOpen, 1) $Addr = "0x" & Hex($BaseAddr + $Static) _MemoryPointerWrite($Addr, $MemOpen, $OffsetFee, $Fee, "dword") _MemoryClose($MemOpen) Mein Problem besteht dadrin das der oben gezeigte teil auf 32bit Versionen Problemlos funktioniert aber auf Win7/Vista mit 64bit nicht.
Probs mit _Memory Funktionen
10/16/2010 - Nostale - 6 Replies
Hi, ich hab schon vor einiger zeit ma aus lw nen memorybot gescriptet, jedoch macht er nicht dass, was im script steht. Er erkennt die werte (bereits in .ini schreiben lassen und waren richtig), aber führt danach nicht die ensprechende Tätigkeit aus.hier mal das Script:Link die library.au3 is bloß ne datei, die alle dateien im include-ordner includet. ist ebenfalls mit meiner NomadMemory.au3 dabei. Bitte um Erklärung und mögliche Lösungen. THX^^
Probs mit _Memory Funktionen
10/11/2010 - Nostale - 1 Replies
Hi, ich hab schon vor einiger zeit ma aus lw nen memorybot gescriptet, jedoch macht er nicht dass, was im script steht. Er erkennt die werte (bereits in .ini schreiben lassen und waren richtig), aber führt danach nicht die ensprechende Tätigkeit aus.hier mal das Script: die library.au3 is bloß ne datei, die alle dateien im include-ordner includet. ist ebenfalls mit meiner NomadMemory.au3 dabei. Bitte um Erklärung und mögliche Lösungen. THX^^



All times are GMT +2. The time now is 04:32.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.