Freigeben über


Regeln und Einschränkungen für nackte Funktionen

Microsoft-spezifisch

Die folgenden Regeln und Einschränkungen gelten für nackte Funktionen:

  • Die return-Anweisung ist nicht zulässig.

  • Die strukturierte Ausnahmebehandlung und C++-Ausnahmebehandlung die Konstrukte behandeln, sind nicht zulässig, da sie über den Stapelrahmen selbst entladen werden muss.

  • Aus demselben Grund wird jedes Formular von setjmp verhindert.

  • Verwendung der _alloca-Funktion wird verhindert.

  • Um sicherzustellen, dass kein Initialisierungscode für lokale Variablen vor der vorläufige sequence, werden nicht initialisierte lokale Variablen wird im Gültigkeitsbereich der Funktion zulässig.Insbesondere wird die Deklaration von C++-Objekten nicht im Gültigkeitsbereich der Funktion zulässig.Es gibt jedoch möglicherweise initialisierte Daten in einem geschachtelten Bereich.

  • Framezeiger, die Optimierung (die /Oy-), aber nicht empfohlen wird, wird automatisch für eine nackte Funktion unterdrückt.

  • C++-Klassenobjekte können Sie gültigkeitsbereich lexikalischen Funktion nicht deklarieren.Sie können jedoch Objekte in einem geschachtelten - Blocks deklarieren.

  • Das naked-Schlüsselwort wird beim Kompilieren mit /clrignoriert.

  • Eine nackte Funktionen __fastcall wenn es einen Verweis im C/C++-Code auf eines der Argumente Register vorläufige vorhanden sind, sollte der Code die Werte in den Stapel des Registers Speicherorts für diese Variable speichern.Beispiele:

// nkdfastcl.cpp
// compile with: /c
// processor: x86
__declspec(naked) int __fastcall  power(int i, int j) {
   // calculates i^j, assumes that j >= 0

   // prolog
   __asm {
      push ebp
      mov ebp, esp
      sub esp, __LOCAL_SIZE
     // store ECX and EDX into stack locations allocated for i and j
     mov i, ecx
     mov j, edx
   }

   {
      int k = 1;   // return value
      while (j-- > 0) 
         k *= i;
      __asm { 
         mov eax, k 
      };
   }

   // epilog
   __asm {
      mov esp, ebp
      pop ebp
      ret
   }
}

Siehe auch

Referenz

Nackte Funktionsaufrufe