Einzelnen Beitrag anzeigen

Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#17

Re: Speicherbereich einer Anwendung ermitteln

  Alt 26. Apr 2006, 22:02
Zitat von SnuffMaster23:
Nee, mal ensthaft: Ich dachte, gerade das wäre der Trick an den virtuellen 32-Bit Adressen.
Isses auch, an die physikalische Adresse kommst du ohne weiteres nicht ran, die aktuelle Page kann sonstwo rumfliegen, wenn's grad' mies um den Arbeitsspeicher bestellt ist sogar im Swapfile auf der Festplatte Und von alldem kriegst du nichts mit.
Aber die physikalische Adresse interessiert auch nicht mehr sonderlich, denn mit WriteProcessMemory() schreibst du in den virtuellen Adressraum des Programmes. Die Adressen, mit denen man arbeitet, sind zwar immer noch virtuell, aber dafür sind es die des anderes Prozesses und nicht deines eigenen. No magic

Zitat von SnuffMaster23:
Außerdem haben die sich manchmal gegenseitig gestört (glaub ich) wenn man nicht sehr umsichtig programmiert hatte, weil sie eben nebeneinander im selben Speicherbereich lagen.
Über WPM() kriegt man das heute immer noch hin, wenn dein Prozess entsprechende Rechte hat. Andere Prozesse abzuschießen ist nach wie vor kein Kunststück, aber es passiert nicht mehr aus Versehen oder aus Dummheit

Zitat von SnuffMaster23:
Das werd ich nochmal etwas überdenken müssen...
Nope, dein Weltbild hat gestimmt, aber du bist davon ausgegangen, daß WPM() in den physikalischen Speicher schreibt, bzw man Werte nur im physikalischen Speicher ändern kann.

Zitat von SnuffMaster:
Wie sollten sonst auch Sachen wie die Zwischenablage, OLE oder einfach das Nachrichtensystem von Windows funktionieren...
Komplizierter


@bundy: Wenn du großartig debuggen willst, solltest du dich auch mal über die Tool Help API schlau machen. Rumgefummele mit Modulhandles würde ich beispielsweise nicht wagen, denn niemand garantiert mir, daß der numerische Wert des Handles die Basisadresse des Moduls ist. Mir Module32First() und Module32Next() kannst du aber durch die Module eines Przesses iterieren, das gesuchte rausfischen und kommst laut API an die Basisadresse. Bei Microsoft gibt's dazu auch ein Beispiel (Funktion ListProcessModules() ist für dich interessant).

Eigentlich ist es aber so, daß das Prozessmodul (also die Exe) immer an der gleichen Stelle geladen wird, wenn ich mich richtig erinnere ist das mittlerweile 0x400000, sofern dort Platz ist, und das sollte beim Laden des Prozesses ja immer der Fall sein. Bist du denn sicher, daß dein Freund die gleiche Version (Patchlevel) wie du benutzt? Mitunter ändern die Hersteller die Position der Variablen gerne von Patchlevel zu Patchlevel, um gerade solche Hacks zu erschweren.
  Mit Zitat antworten Zitat