Frage

Ok, sagt, dass meine Anwendung aussendet (x86) Anweisungen in dem Speicher, so dass die Seite ausführbaren usw. Gibt es eine Möglichkeit, das Verfahren Stummel ein un-JITted Verfahren zur Veränderung meines emittierten Befehlsstrom zeigen?

Z. B:.

Angenommen, ich habe einen x86-Befehlsstrom im Speicher erzeugt, die etwas willkürlich tut. Nun weiter annehmen, dass ich eine Methode ‚int Target ()‘. Ich habe es noch nicht genannt, so ist es nicht erstellt. Gibt es eine Möglichkeit an:

  1. Holen Sie sich den Zeiger auf Ziel-Stub
  2. Machen Sie es zu meinem emittierten Befehlsstrom zeigen.

Ich stelle fest, dass praktisch jede einzelne Sicherheitsfunktion von .Net ausgelegt ist verhindern Hijacking wie diese. Aber ist es möglich, durch, sagen wir, die Hosting-API?

War es hilfreich?

Lösung

Ja, Sie können tun!

Haken getJit Methode von mscorjit. Und Sie werden jedes Mal anymethod benötigen Jitting gebeten. Sie können, was Sie wollen passieren. Einige .net Schützern funktioniert wie folgt.

Andere Tipps

Dies ist möglich, über den Profilerstellungs-API. Ich habe es nie benutzt, aber es ist für einen ähnlichen Zweck in TypeMock verwendet.

Edit:. Ich denke, dass es eine schöne Posting auf der MSDN Blogs war, wird es gehen Jagd

Edit 2: Doh, hit zuerst!

Wie Sie sagen, dass dies nicht einfach ist und es nicht einmal möglich sein kann. Wenn ich richtig der Code erinnere die Adresse des JIT-Compiler für ein Verfahren umfasst, ist das nicht erstellt. Also, wenn Sie versuchen, diese Methode aufzurufen, wird der JIT-Compiler seine Aufgabe erfüllen und die Adresse in die neu kompilierte Methode einfügen. Wenn Sie diese Adresse ändern können, können Sie in der Lage sein, einen Anruf zu Ihrem eigenen Code einzufügen. Wie würden Sie tun dies unentdeckt ist mir schleierhaft. Ich hoffe, die CLR diese Art von Manipulation erkennt.

Ich glaube nicht das Profilieren API Sie in diesem Fall helfen wird (wie durch leppie vorgeschlagen), da Sie nicht MSIL zu ändern versuchen. Wenn Sie denken, sonst dieser Artikel von Nutzen sein kann, wie es beschreibt, was Sie tun müssen, implementieren, was TypeMock tut.

Zusätzlich zu der Möglichkeit, ICorProfiler zu verwenden, und umschreiben Ihre Methode, bevor es jits, können Sie ICorDebug (MDBG Schnittstelle verwaltet hat). Legen Sie einen Haltepunkt, wenn die Unterbrechungs Hits die nächste Anweisung zu Ihrem Abfangen Code festgelegt. All dieses Prozesses kann von Code getan werden, aber ist wirklich aufdringlich und Sie werden einen „Beobachter“ Prozess müssen diese koordinieren.

Eine andere Sache, lohnt ein Blick auf die Postsharp Projekt, das Sie Ein- und Ausstiegsmethoden gibt, wenn Sie Attribute gelten .

würde ich nicht versuchen und Chaos direkt mit dem Speicher und ich bin nicht sicher, es ist sogar möglich, stattdessen können Sie den Profiler API verwenden - es gibt ein paar Beispiele gibt, aber keine wirkliche Dokumentation. Werfen Sie einen Blick auf MSDN Magazin-Artikel - Rewrite MSIL-Code on the Fly mit dem .NET Rahmenprofilerstellungs-API

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top