2010-12-01 14 views
2

Ich möchte eine Zeichenfolge von Assembler-Code in C# schreiben und an einige Win32 API senden, um sie zu kompilieren und auszuführen und die Ergebnisse zurück zu bekommen.Wie schreibe ich Assemblercode von C#?

Beispiel:

string str = "MOV 1,2;XOR EBP,EBP"... 

klingt schwer zu tun, aber jeder Vorschlag wäre hilfreich.

+0

Darf ich fragen, warum Sie das brauchen? Für Fahrer oder Effizienz oder andere? –

+0

Wenn es getan werden könnte, beabsichtige ich, einen einfachen Sortieralgorithmus in Assembly in Handarbeit zu erstellen und es mit einem .net zu vergleichen. C# one –

+0

Hm ... .Net bytecode ist JIT-ed für die spezifische Architektur. Ich weiß, dass Sie zur IL gelangen können, aber ich frage mich, ob Sie den Code, der in den Maschinencode übersetzt wurde, schnüffeln können. Dann könnten Sie sich den Code ansehen, versuchen, ihn selbst zu schlagen. Dies wird hardwarespezifisch sein. –

Antwort

5

Ich bezweifle, dass es ist eine Win-API zu kompilieren & Montage auszuführen. Wahrscheinlich ist das Beste, was Sie tun können, eine Datei zu schreiben, MASM (oder wie auch immer es in diesen Tagen heißt) auszuführen, es zu verknüpfen und dann das resultierende Programm auszuführen. Ich kann mir nicht vorstellen, was Sie versuchen, aber das wäre so ziemlich der letzte Weg, ich würde versuchen, fast jedes Problem zu lösen!

Wenn Sie nativen & verwalteten Code vergleichen möchten, schreiben Sie einfach zwei Programme, die mehr oder weniger die gleiche Sache tun. Es gibt keinen Grund, die Assembly von .NET zu generieren. Sie können dafür jedes geeignete Werkzeug verwenden. MASM, debuggen usw.

+0

+1 aber ich denke es geht nach dem letzten Weg Ich würde versuchen, jedes Problem zu lösen. – kenny

1

AFAIK gibt es keinen Assembler Compiler als Teil von WinAPI. Sie müssten einige der Compiler von Drittanbietern verwenden (und Ihr Programm müsste es neu verteilen).

Sie können jedoch ilasm verwenden, die ein Teil von .NET Framework ist. (Vorsicht jedoch, dass es nicht ein Intel32 Compiler, seine Quelle ist CIL Code, so dass die Anweisungen wie xor ebp, ebp würde nicht funktionieren.)