Erste Shritte in C# und OpenProcess

15/03/2009 - 18:48 von Maciej Iksrobicar | Report spam
Hallo Zusammen,

da ich immer etwas spannendes machen möchte wàhrend ich mir etwas beibringe,
habe ich angefangen den Minesweeper zu "hacken"
(http://www.codeproject.com/KB/trace...eader.aspx), um C# zu lernen
;-)
Dazu stellen sich mir folgende Fragen.

1. Was macht die folgende Definition?

[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32
bInheritHandle, UInt32 dwProcessId);

Wird hier von C nach C# übersetzt oder wie soll ich das verstehen?

2. Es gibt die folgende Funktion, um Speicher eines Prozesses zu lesen.

[DllImport("kernel32.dll")]
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr
lpBaseAddress,[In, Out] byte[] buffer, UInt32 size, out IntPtr
lpNumberOfBytesRead);

Hier muss ich angeben wieviele Bytes zu lesen sind. Was aber, wenn ich nicht
weiß wieviele zu lesen sind? Wie kann ich im Programm so lange lesen bis
eine bestimmte Stelle null ist? Gibt es eine Funktion ReadByte die ich in
einer Schleife einsetzen könnte? Wie würde der Code aussehen?

Mit freundlichen Grüßen,
Maciej Iksrobicar
 

Lesen sie die antworten

#1 Kerem Gümrükcü
15/03/2009 - 19:18 | Warnen spam
Hallo,

da ich immer etwas spannendes machen möchte wàhrend ich mir etwas
beibringe, habe ich angefangen den Minesweeper zu "hacken"
(http://www.codeproject.com/KB/trace...eader.aspx), um C# zu
lernen ;-)



Naja, ich weiss nicht, ob das so das richtige ist um C# zu lernen. Mit dem
"C# Lernen" redet man eigentlich von der Sprache und in dem Fall des
Minesweepers ist es eher eine Technik,...

Dazu stellen sich mir folgende Fragen.

1. Was macht die folgende Definition?

[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32
bInheritHandle, UInt32 dwProcessId);



Das ist eine Funktionsdefinition, mit der Du eine Exportierte Funktion aus
einer C-Dll in dein Programm einbindenkannst. Diese Funktionen öffnet
ein Handle auf einen Prozess, mit dem man dann arbeiten kann,, Die wirs
in dein Programm aus der kernel32.dll importiert und der Exportname
der Funktion ist "OpenProcess",...

2. Es gibt die folgende Funktion, um Speicher eines Prozesses zu lesen.

[DllImport("kernel32.dll")]
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr
lpBaseAddress,[In, Out] byte[] buffer, UInt32 size, out IntPtr
lpNumberOfBytesRead);

Hier muss ich angeben wieviele Bytes zu lesen sind. Was aber, wenn ich
nicht weiß wieviele zu lesen sind?



Das ist nicht sonderlich vorteilhaft, da man das schon wissen sollte und
wenn nicht, dann,...

Wie kann ich im Programm so lange lesen bis eine bestimmte Stelle null
ist?



liesst Du in einer Schleife alles ein, wobei ich den Sinn jetzt nicht
verstehe, warum Du gerade nach einer "null" suchen willst, vielleicht
meinst Du auch "0",...?

Gibt es eine Funktion ReadByte die ich in einer Schleife einsetzen könnte?
Wie würde der Code aussehen?



Du kannst das mit der Schleife machen, in dem Du immer den Size
auf 1 làsst und aber dafür den lpBaseAddress mit dem Schleifenzàhler
inkrementierst. Dann schausst Du auf den Wert in buffer und entscheidest,
ob Du aus der Schleide raus willst,...so bekommst Du deine byte-für-byte
Speicherstückchen

Grüße

Kerem


Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Latest Project: http://www.pro-it-education.de/soft...iceremover
Latest Open-Source Projects: http://entwicklung.junetz.de
"This reply is provided as is, without warranty express or implied."

Ähnliche fragen