Regole e limitazioni per le funzioni naked

Specifici di Microsoft

Le seguenti regole e limitazioni valgono per le funzioni naked:

  • return l'istruzione non è valido.

  • I costrutti di gestione delle eccezioni C++ e di gestione delle eccezioni strutturata non sono consentiti in quanto è necessario rimuovere attraverso lo stack frame.

  • per lo stesso motivo, qualsiasi form di setjmp è consentito.

  • Utilizzo di _alloca la funzione viene impedita.

  • Per assicurarsi che nessun codice di inizializzazione per le variabili locali senza che la sequenza di prologo, variabili locali inizializzate non sia valida all'ambito della funzione.In particolare, la dichiarazione di oggetti C++ non è valida all'ambito della funzione.È possibile, tuttavia, essere dati inizializzati in un ambito annidato.

  • Il puntatore a frame che l'ottimizzazione (l'opzione del compilatore /Oy) non è consigliato, ma automaticamente eliminato per una funzione naked.

  • Non è possibile dichiarare gli oggetti di classi C++ ambito lessicale di funzione.È possibile, tuttavia, dichiarare gli oggetti in un blocco annidato.

  • naked la parola chiave viene ignorata durante la compilazione con /clr.

  • per __fastcall le funzioni naked, ogni volta che si verifica un riferimento nel codice C/C++ a uno degli argomenti del registro, il codice di prologo memorizzare i valori del registro nel percorso dello stack per tale variabile.Di seguito è riportato un esempio:

// 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
   }
}

Vedere anche

Riferimenti

Chiamate di funzione naked