编译器警告(等级 1)C4733

内联 asm 分配到“FS:0”:处理程序未注册为安全处理程序

修改 FS:0 处的值以便新增异常处理程序的函数可能不适用于安全异常,因为该处理程序可能无法注册为有效的异常处理程序(请参阅 /SAFESEH)。

若要解决此警告,请删除 FS:0 定义,或关闭此警告并使用 .SAFESEH 来指定安全异常处理程序。

下面的示例生成 C4733:

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