编译器警告(等级 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;
}