MSIL Fragen



  • Ich verstehe folgenden Code-Ausschnitt nicht so richtig:

    int Add(int index, System.Windows.Forms.MenuItem item)

    IL_0000: ldarg.2
    IL_0001: ldfld      class System.Windows.Forms.Menu System.Windows.Forms.MenuItem::menu
    IL_0006: brfalse.s  IL_007f
    
    ...
    
    IL_006f: ldfld      class System.Windows.Forms.Menu System.Windows.Forms.MenuItem::menu
    IL_0074: callvirt   instance class System.Windows.Forms.Menu/MenuItemCollection
    

    Die Adresse von item wird auf den Stack gelegt.
    Die Adresse von item.menu wird auf den Stack gelegt.
    Wenn item.menu gleich false (sprich: Null) ist, wird zu IL_007f gesprungen.

    Ich nehme an IL_007f ist das Gleiche wie IL_0070f. Allerdings befindet sich auf IL_0070f kein Opcode, bzw. ein Anfang eines Opcodes. Wie kann ich das verstehen? Wird mitten in ldfld hingesprungen? Wenn ja, woher weiß ich, wie ldfld aufgebaut ist? 😕



  • Sorry, hatte irgendwie ne Hirnblockade und das 7f als 7 interpretiert. 🙄



  • ldtoken MyNamespace.MyClass
    

    MSDN Library schrieb:

    ldtoken
    Konvertiert ein Metadatentoken in seine Laufzeitdarstellung.

    Kann mir das mal jemand bitte genauer erlären (vielleicht mit einem Beispiel)? Wie kann ich mir ldtoken denn in C# vorstellen?


Anmelden zum Antworten