C# mit Methode: Lernen - Verstehen - Anwenden

C# mit Methode: Lernen - Verstehen - Anwenden

von: Christian Bleske (Hrsg.)

C & L Computer- und Literaturverlag GmbH, 2004

ISBN: 9783936546125 , 730 Seiten

Format: PDF, OL

Kopierschutz: DRM

Windows PC,Mac OSX Apple iPad, Android Tablet PC's Online-Lesen für: Windows PC,Mac OSX,Linux

Preis: 15,00 EUR

Mehr zum Inhalt

C# mit Methode: Lernen - Verstehen - Anwenden


 

KAPITEL 8: MSIL/CIL, DIE .NET-ASSEMBLER-SPRACHE (S. 644-645)

von Michael Steil

o Tools
o Überblick über MSIL
o Der Stack
o Verwenden der Klassenbibliothek
o Decompiler
o Obfuscation (Verschleierung)

C#-Programme werden nie direkt in die Assemblersprache der Maschine, also x86 oder PowerPC und so weiter übersetzt, sondern zunächst immer in die Zwischensprache MSIL (Microsoft Intermediate Language, auch CIL, Common Intermediate Language). Erst zur Laufzeit wird der Zwischencode dann wie auch bei Java in die jeweilige Assemblersprache der Maschine gewandelt. MSIL ist also in gewisser Weise die Assemblersprache des .NET-Systems.

Sie fragen sich nun vielleicht, wieso es heute noch wichtig sein sollte, eine Assemblersprache zu können. Haben Sie in den letzten fünf Jahren einmal Assembler programmieren müssen? Wahrscheinlich nicht. Sofern Sie über (grundlegende) x86-Assemblerkenntnisse (oder welche auch immer) verfügen: Haben Ihnen diese bei der C/C++-Entwicklung genützt? Gut möglich. Kenntnisse in Assembler helfen bei der Abschätzung des Aufwands einer Operation, beim Debugging, sowie beim Reverse-Engineering. Und vergessen Sie nicht, daß man allein durch gutes Reverse Engineering auch abschätzen kann, wie aufwendig es für Ihre Konkurrenz sein wird, Ihre Algorithmen zu verstehen oder anders gesagt: wie offen die Algorithmen in Ihrem Produkt liegen.

In .NET gibt man nämlich sehr viel mehr von seinen Implementierungsdetails preis, als wenn man nach einer echten Assemblersprache wie x86 kompiliert. Das Dekompilieren und Verstehen des Codes ist um ein Vielfaches einfacher und mit den richtigen Tools sogar trivial. Mit Hilfe des Wissens über die Funktionsweise von MSIL sollen Sie daher in diesem Kapitel ein Gespür für all dies bekommen.

8.1 TOOLS

Das .NET Framework enthält bereits alle Werkzeuge, die benötigt werden, um mit MSIL zu arbeiten, nämlich einen Assembler (ilasm.exe) und einen Disassembler (ildasm.exe), der neben dem Batch- und Befehlszeilenbetrieb auch das grafische Erforschen von Assemblies ermöglicht. Assembler und Disassembler sind dabei zudem so aufeinander abgestimmt, daß es möglich ist, Assemblies zu disassemblieren, die Assemblerdatei zu editieren und die Datei wieder zu assemblieren (Roundtrip).

Der Aufruf beider Tools ist naheliegend. In den allermeisten Fällen genügt es, den Assembler (ilasm.exe) einfach mit dem Namen der Assemblerquelltext- Datei aufzurufen. Der Disassembler (ildasm.exe) startet ohne die Angabe von Parametern im grafischen Modus, in dem man interaktiv mit der Anwendung arbeiten kann. Die Hilfe erhält man, wenn man ihn mit ildasm /? aufruft. Um eine Assembly direkt zu disassemblieren, gibt man also den Namen der Assembly und über die Option /out= den Namen der zu erstellenden Assemblerdatei an. Über Optionen wie /bytes, /tokens und /linenum lassen sich noch weitere Informationen aus der Assembly als Kommentare dem Assemblerquelltext hinzufügen.