Ist es möglich, die zur Ausführung eines x86-assembly-Sequenz von in C#?
Fortsetzung meiner reverse-engineering-Ausbildung habe ich oft wollte der Lage sein, kopieren Sie Teile von x86-Assembler-code und rufen Sie es von einer high-level Sprache meiner Wahl zum testen.
Kennt jemand eine Methode für das aufrufen einer Abfolge von x86-Anweisungen in einem C# - Methode? Ich weiß, dass dies getan werden kann, mit C++, aber ich bin mal gespannt, ob es getan werden kann, in C#?
Hinweis: ich spreche nicht über die Ausführung von MSIL-Anweisungen. Ich spreche von der Ausführung einer Reihe von raw-x86-assembly-Anweisungen.
- Es existieren Bibliotheken, um dies zu tun mehr leicht als Marshalling-Funktion Zeiger von hand: http://www.edgeofnowhere.cc/viewtopic.php?t=429219 http://www.edgeofnowhere.cc/viewtopic.php?t=429220
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur zu begegnen Brians Forderung, umgeschrieben code von leppie Antwort link:
VirtualAlloc
PInvoke ist falsch. dwSize sollteIntPtr
oderUIntPtr
Ja, siehe meine ausführliche Antwort hier
Der wichtigste Teil ist: (Ohne P/Invoke oder externe Referenz)
Kann wie folgt verwendet werden:
Ich glaube, Sie können fügen Sie eine verwaltete C++ - Projekt für Ihre Lösung und setzen Sie Methode mit Verwendung von asm-Anweisungen. Sie können auf das Projekt von jedem .Net-Projekt (nicht nur C#), so können Sie rufen Sie diese Methode aus.
Ja.
Nur mit P/Invoke auf winapi-Funktionen.
WriteProcessMemory oder finden Sie den Zeiger auf den Puffer.
Aktivieren Sie die execute-bit auf der Seite (nicht vergessen, die Funktion).
CreateThread auf den Zeiger.
WaitForObject (wenn Sie wollen, dass es single-threaded).
Nein, aber Sie können schreiben, assembly in C++ und rufen Sie es von C#. Sehen dieses Beispiel.