Udostępnij za pośrednictwem


Zasady i ograniczenia dotyczące funkcji bez nadruku

Programu Microsoft

Do funkcji nagi stosuje się następujące zasady i ograniczenia:

  • return Instrukcja nie jest dozwolone.

  • Konstrukcje strukturalnej obsługi wyjątków i sposób obsługi wyjątków C++ nie są dozwolone, ponieważ muszą one relaks całej ramki stosu.

  • Z tego samego powodu jakiejkolwiek formy setjmp jest zabronione.

  • Korzystanie z _alloca funkcja jest zabronione.

  • W celu zapewnienia, że żaden kod inicjowania dla zmiennych lokalnych pojawia się przed sekwencji prologu, zainicjować zmiennych lokalnych nie są dozwolone w zakresie funkcji.W szczególności deklarację obiekty C++ nie jest dozwolone na zakres funkcji.W zakresie zagnieżdżonych jednak może być zainicjowane dane.

  • Optymalizacja wskaźnik ramki (opcja kompilatora /Oy) nie jest zalecane, ale nie jest automatycznie wyświetlany dla funkcji bez nadruku.

  • Nie można zadeklarować obiekty klas C++ w zakresie leksykalne funkcji.Można jednak zadeklarować obiekty zagnieżdżonego bloku.

  • naked Słowo kluczowe jest ignorowany podczas kompilacji z /CLR.

  • Dla __fastcall funkcje bez nadruku, w każdym przypadku, gdy występuje odwołanie w kodzie C/C++, aby jeden z argumentów rejestru, kod prolog powinny być przechowywane wartości rejestru do lokalizacji stosu dla tej zmiennej.Na przykład:

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

Zobacz też

Informacje

Wywołania funkcji bez nadruku