Zugriff auf den Speicher fremder .NET-Prozesse
-
Das ist nicht so entscheidend, weil man den Prozess sicher auch pausieren kann, oder? Wenn ich die Adresse herausfinden könnte, wäre das Problem schon gelöst Mein .NET-Programm kann die leider nicht selbst herausfinden, weil es in C# geschrieben ist und nicht die nötige Berechtigung zur Verwendung von unsafe-Blöcken hat.
Gibt es da z.B. eine gute Möglichkeit, diese Adresse der Instanz herauszufinden, wenn man eine Klasse wie diese hat:
public ref class Klasse : public AndereKlasse { public: int eineZahl; }; Klasse ^klasse = gcnew Klasse();
und die Adresse von klasse->eineZahl bereits herausgefunden hat? Eine andere Methode fällt mir nicht ein
-
Wenn Du den Prozess pausieren lassen kannst, dann kannst Du z.B. WinDbg (oder cdb) einfach verwenden um die Adressen zu ermitteln (mittel sos.dll).
Oder natürlich auch indem Du eine Profiler-DLL in den Prozess einschleusst...
-
Funktioniert das auch für .NET?
-
Das funktioniert *nur* für .NET!
-
Was ist eine Profiler-DLL und wo bekommt man sowas her?
EDIT: Bei Wikipedia steht, dass Profiler zur Analyse der Laufzeit bestimmt sind, aber nicht, dass man damit auch die Adresse bestimmter Objekte in .NET-Anwendungen herausfinden kann.
-
Ein älteres Beispiel gibt es hier:
http://msdn.microsoft.com/en-us/magazine/cc301725.aspxSIehe auch:
http://msdn.microsoft.com/en-us/library/bb384493.aspx
-
Danke, hat mir sehr weitergeholfen
Aber geht das auch mit Administratorrechten?
-
Wolltest Du fragen, ob es auch *ohne* Admin-Rechte geht...
MIT Admin-Rechten geht sowas immer
-
Ja, klar, sorry... Ich meinte natürlich ohne.
-
Wenn Du denn Prozess startest geht es AFAIk auch ohne...