问题描述
我想创建只使用 ntdll 并对其进行安全检查的应用程序。但是当我删除 kernel32.lib 或取消选中“从父项或项目默认值继承”时,我在构建项目时会收到链接错误。 Link Errors
#include <Windows.h>
#include <processthreadsapi.h>
#include <vcruntime.h>
ULONG WINAPI NtGetCurrentProcessorNumber(void);
void main()
{
int a = 2;
int b = 5;
int sum = a + b;
int Number = NtGetCurrentProcessorNumber();
while (1)
{
}
}
void NtProcessstartup(PVOID DriverObject,PVOID RegistryPath)
{
__security_init_cookie();
//__security_check_cookie();
main();
}
这是一个本地项目,当我在编译器设置中删除“安全检查”开关并删除“__security_init_cookie”功能时工作正常。这个项目链接到 ntdll.lib
有人可以帮我吗?
解决方法
当您使用安全检查时,__security_xx
函数会链接到您的模块。链接器错误表明 gs_support.obj
(__security_xx
函数所在的位置)需要 QueryPerformanceCounter
和
其他列出的功能。 QueryPerformanceCounter
resides in kernel32,因此在使用安全检查时需要与其链接。