[VB]Memory Address

02/27/2009 15:47 .aNNdii##1
Weiß jemande wie ich eine Memory Addresse in Visual Basic einbauen kann ? :)
Ahja habe VB08 :)

Liebe Grüße,
AngelAndi
02/27/2009 16:55 12354#2
Mit WinApi "ReadProcessMemory" und "WriteProcessMemory"
Code:
Public Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
Public Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
Brauchst halt das Prozesshandle
Code:
Dim myProcesses As Process() = Process.GetProcessesByName("notepad")
Dim processHandle as IntPtr = myProcesses(0).Handle
und die Adresse.

Beispiel wäre:
Code:
Dim zahl as Integer = 20
Dim adresse As Integer = &HD43318
WriteProcessMemory(processHandle, zahl, adresse, 4, 0)
oder um auszulesen
Code:
Dim buffer as Integer
ReadProcessMemory(processHandle, &HD43318,buffer, 4, 0)
EDIT: Mir fällt grad ein, dass deine Anwendung manchmal auch DebugRechte braucht.
Die kannste mit
Code:
Process.EnterDebugMode()
erhalten(am besten im Form.Load Event)
02/27/2009 18:36 iNFIDEL_#3
[Only registered and activated users can see links. Click Here To Register...]
Take a look at their example.
02/28/2009 12:28 .aNNdii##4
>.< jetzt seh ich wida das ich noch viel lerenen muss >.> trotzdem danke^^
Checke das mit Processhandle net :<

iNFIDEL the Tutorials are for VB6 :)
02/28/2009 13:45 12354#5
Das Prozesshandle gibt halt an von welchem Prozess du ausliest.(irgendwie muss du des der winapi ja sagen ; D)
Als erstes speichere ich alle Prozesse ,die den ProzessNamen "notepad"(ohne .exe!!) haben, in ein Array.
Code:
Dim myProcesses As Process() = Process.GetProcessesByName("notepad")
Jetzt nehme ich den ersten Prozess aus dem Array(myProcesses(0)) und weise
der Variable processHandle das Handle vom Prozess zu
Code:
Dim processHandle as IntPtr = myProcesses(0).Handle
Oben hab ich das processHandle nicht als IntPtr deklariert gehabt : ((. Habs mal richtig editiert.Sollte jetzt funktionieren
06/30/2009 21:18 Mi4uric3#6
Ich weiß nicht, warum das neuerdings bei mir auftaucht..
Wenn ich die Zeile "Dim processHandle.." ausblende dann kommt der Fehler nicht.. o.O

Fehler:
Quote:
Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Der Index war außerhalb des Arraybereichs..
Wisst ihr warum das kommt?