SetErrorMode 反虚拟机
时间: 2023-07-13 13:38:31 浏览: 50
SetErrorMode 是一个Windows API函数,它用于设置系统错误模式,可以控制系统对不同类型错误的处理方式。反虚拟机技术是一种可以检测和防止程序在虚拟机环境中运行的技术。两者没有直接的关联。
如果您想了解如何使用 SetErrorMode 函数来防止某些错误弹窗的出现,可以在程序的入口处添加以下代码:
```
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
// 设置错误模式为 SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
// 程序其余代码
return 0;
}
```
这样,程序在发生一些严重的错误时,如出现致命错误或无法打开文件等,将不会弹出 Windows 默认的错误提示框。这对一些自动化运行的程序很有用,可以让程序在出错时不被中断。
相关问题
SetErrorMode 反沙箱
SetErrorMode 函数本身并不能直接用来反沙箱,但是可以通过它来检测当前程序是否运行在沙箱环境中。
在沙箱环境中,一些操作可能被限制或者被重定向到虚拟的文件系统或注册表中,因此可以通过尝试访问某些系统资源来判断程序是否运行在沙箱环境中。比如,在程序的入口处加入以下代码:
```
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
// 设置错误模式为 SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
// 检查是否运行在沙箱环境中
HANDLE hFile = CreateFileW(L"C:\\Windows\\system32\\kernel32.dll", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
// 运行在沙箱环境中
// 可以在这里加入反沙箱代码
}
else
{
// 不运行在沙箱环境中
CloseHandle(hFile);
}
// 程序其余代码
return 0;
}
```
这里尝试访问系统目录下的 kernel32.dll 文件,如果当前程序运行在沙箱环境中,这个文件可能被重定向到虚拟文件系统中,因此无法打开,CreateFileW 函数将返回 INVALID_HANDLE_VALUE。如果程序不运行在沙箱环境中,这个文件可以正常打开,并且返回的句柄不是 INVALID_HANDLE_VALUE。在程序的入口处对是否运行在沙箱环境中进行检测后,您可以加入相应的反沙箱代码。
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOOPENFILEERRORBOX);在linux
在Linux中,没有SetErrorMode函数,因为该函数是Windows API中的一个函数。如果你需要达到类似的效果,你可以通过以下方式实现:
1. 通过signal函数捕获SIGSEGV、SIGBUS等信号,避免程序崩溃。
2. 使用errno变量来检查函数调用时是否出现错误。
3. 使用setjmp和longjmp函数来处理异常。
需要根据具体情况选择合适的方法。