Compilerwarnung (Ebene 1) C4733

Inline asm assigning to 'FS:0' : handler not registered as safe handler

Eine Funktion, die den Wert bei FS:0 ändert, um einen neuen Ausnahmehandler hinzuzufügen, funktioniert möglicherweise nicht mit Tresor Ausnahmen, da der Handler möglicherweise nicht als gültiger Ausnahmehandler registriert wird (siehe /SAFESEH).

Um diese Warnung zu beheben, entfernen Sie entweder die FS:0-Definition, oder deaktivieren Sie diese Warnung, und verwenden Sie sie. SAFESEH zum Angeben der sicheren Ausnahmehandler.

Im folgenden Beispiel wird C4733 generiert:

// C4733.cpp
// compile with: /W1 /c
// processor: x86
#include "stdlib.h"
#include "stdio.h"
void my_handler()
{
   printf("Hello from my_handler\n");
   exit(1);
}

int main()
{
   _asm {
      push    my_handler
      mov     eax, DWORD PTR fs:0
      push    eax
      mov     DWORD PTR fs:0, esp   // C4733
   }

   *(int*)0 = 0;
}