无法解析外部符号 __security_cookie

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

编译VC工程时出现了标题所示问题,资料搜索一下,在微软网站找到答案了,解决方法如下:
1)选择“项目”-》“属性”-》“C/C++”-》“代码生成”-》“缓冲区安全检查”,设为“否”
2)选择“项目”-》“属性”-》“链接器”-》“输入”-》“附加依赖项”,增加”bufferoverflowU.lib”
然后编译工程,解决问题。
下面是微软的原文,说的很冗长,但是很直接!
在 Windows Server 2003 Service Pack 1 通过 Win 32 软件开发工具包 (SDK) 或 Windows
Server 2003 Driver Development Kit (DDK) 生成源代码时可能会收到 ' 链接器工具错误 LNK
2001 ' 错误信息
文章编号 : 894573
最后修改 : 2007年3月27日
修订 : 1.2

症状
生成 32 位源代码或 64 位代码源代码在编译时或在链接时,您可能收到以下错误信息之一:

错误 1
链接器工具错误 LNK 2001
无法解析外部符号 __security_cookie ' '
错误 2
链接器工具错误 LNK 2001
无法解析外部符号 __security_check_cookie ' '
您以生成代码, 在 Windows Server 2003 Service Pack 1 使用或者 Microsoft Win 32 软件开发
工具包 (SDK) 对于 Microsoft Windows Server 2003 Service Pack 1 或 Microsoft
Windows Server 2003 Driver Development Kit (DDK)。
原因
在 Microsoft Visual Studio 2002, 新编译器开关名为 ' / GS ' 被引入到 Microsoft
Visual C++ 编译器。 当设置 “/ GS” 开关,编译器插入编译代码中缓冲区超限检测代码。

编译器函数, 编译器可能受到缓冲区溢出,在栈上插入安全 Cookie 之前返回地址。 安全 Cookie 是计算一个模块加载时间。 在函数上安
全 Cookie 值被推到堆栈。 函数退出, 上编译器 Helper 调用来确保的 Cookie 值是仍相同。 如果值更改, 这视为如符号是缓
冲区溢出堆栈损坏中。 因此, 您可以检测某些直接缓冲区溢出返回地址中。

即使 / GS 开关已得到显著改进和 Visual Studio 2005, Visual Studio 2003 中 / GS 开关保护用户
代码免受所有可能缓冲区溢出安全攻击,但是/ GS 开关并不有助于防止用户代码从所有可能缓冲区溢出安全攻击。 因小性能影响通过 / GS 开
关, 新版本的 VisualC++ 编译器自动设置 / GS 切换 ' ' ' '。 当 / GS 开关设置, 应用程序接收缓冲区溢出增强保护
在运行时 ' '。这可能大大减少该应用程序是容易受到攻击。

默认情况下, 设置 VisualC++ 编译器所附带 Platform SDK 用于 Windows Server 2003 Service
Pack 1 / GS 开关 ' '。 源代码编译时编译器引入函数上堆栈上安全 Cookie, 插入引用到代码。 然后, 函数退出上检查是安
全 Cookie 值。 此外, PlatformSDK 中的大多数库已生成与 / GS 开关设置 ' '。 库已引用是以提供所需程序代码 /
GS 切换增强保护运行时 ' '。

VisualStudio, 用于代码中 / GS 开关位于 C 运行时库 ' '。 这是由链接器, 请求中默认库。 但是, 版本所附带
PlatformSDK C 运行时库有关 VisualStudio 没有相同代码作为 C 运行时库。 发生用户构建应用程序和服务可针对不同模式
是操作系统此差异是因为允许 PlatformSDK。 对安全 Cookie 添加到编译代码验证不得不以不同方式执行。 不同方式取决于什么操作系
统模式服务或应用程序中运行。它因此, 已决定来提供三库实现安全 Cookie 的验证。bufferoverflowU.lib 此库实现功能用于
安全 Cookie 验证一起使用以用户模式和在使用 Win32API 应用程序。 大多数应用程序链接到此库。
bufferoverflowK.lib 此库实现对工作安全 Cookie 检查是操作系统内核模式中。 服务和子系统在内核模式运行一定要链接到此
库。
bufferoverflow.lib 该库在用户模式实现安全 Cookie 验证一起使用的功能。 由于 bufferoverflow.lib
在服务和应用不使用 Win32API 中可用但是, bufferoverflow.lib 与不同在 bufferoverflowU.lib。

解决方案
要解决错误是由链接器, 引发您需要通过之一以前提到 bufferoverflow*.lib 库链接项目。 例如, 下列程序是一个简单程序, 可
通过使用平台 SDK 生成。
#include #include void mymethod(char* szIn) { char szBuf[10]; strcpy
(szBuf, szIn); puts(szBuf);}int main(int argc, char* argv[]) { if
(argc>1) mymethod(argv[1]);}

以下代码示例显示正确编写代码要求对缓冲区溢出增强保护。 VisualC++ 编译器向编译代码添加增强保护。 无法编译代码链接因为链接器无法解析
对下列引用:? __security_cookie
? __security_check_cookie

>cl a.cppMicrosoft (R) C/C++ Optimizing Compiler Version 14.00.40310.32 for AMD64Copyright (C) Microsoft Corporation. All rights reserved.a.cppMicrosoft (R) Incremental Linker Version 8.00.40310.31Copyright (C) Microsoft Corporation. All rights reserved./out:a.exea.obja.obj : error LNK2019: unresolved external symbol __security_cookie referenced in function 'void __cdecl mymethod(char *)' (?mymethod@@YAXPEAD@Z)a.obj : error LNK2019: unresolved external symbol __security_check_cookie referenced in function 'void __cdecl mymethod(char *)' (?mymethod@@YAXPEAD@Z)a.exe : fatal error LNK1120: 2 unresolved externals

要解决这些错误, 您需要指定链接器必须也使用 bufferoverflowU.lib。 这假定应用程序面向用户模式, 可使用
Win32API。

>cl a.cpp bufferoverflowU.libMicrosoft (R) C/C++ Optimizing Compiler Version 14.00.40310.32 for AMD64Copyright (C) Microsoft Corporation. All rights reserved.a.cppMicrosoft (R) Incremental Linker Version 8.00.40310.31Copyright (C) Microsoft Corporation. All rights reserved./out:a.exea.objbufferoverflowU.lib>

如果您使用两步生成过程, 应用以下代码示例。

>cl –c a.cpp bufferoverflowU.libMicrosoft (R) C/C++ Optimizing Compiler Version 14.00.40310.32 for AMD64Copyright (C) Microsoft Corporation. All rights reserved.a.cpp>link a.obj bufferoverflowU.libMicrosoft (R) Incremental Linker Version 8.00.40310.31Copyright (C) Microsoft Corporation. All rights reserved.>

参考
有关: / GS 缓冲区安全检查在 VisualC++ 编译器选项, 请访问以下 Microsoft Developer Network
(MSDN) Web 站点 ' '
http://msdn2.microsoft.com/en-us/library/8dbf701c(vs.71).aspx (http://
msdn2.microsoft.com/en-us/library/8dbf701c(vs.71).aspx)
有关编译器安全检查, 请访问以下 MSDN 网站:
http://msdn2.microsoft.com/en-us/library/aa290051(VS.71).aspx (http://
msdn2.microsoft.com/en-us/library/aa290051(VS.71).aspx)

Windows安全机制》之GS机制 Windows安全机制第三弹——GS机制 第一篇《Windows安全机制——ASLR(地址随机化)及如何关闭ASLR》,地址如下:https://blog.csdn.net/weixin_43742894/article/details/105702886 第二篇《Windows安全机制——DEP保护》 ... 阅读详情

相关推荐

无法解析外部符号 __security_cookie”问题解决 - 通星技术 - CSDNBlog

导读: 编译VC工程时出现了标题所示问题,资料搜索一下,在微软网站找到答案了,解决方法如下:1)选择“项目”-》“属性”-》“C/C++”-》“代码生成”-》“缓冲区安全检查”,设为“否”2)选择“项目”-》“属性”-》“链接器”-》“输入”-》“附加依赖项”,增加”bufferoverflowU.lib”然后编译工程,解决问题。下面是微软的原文,说的很冗长,但是很直接! 在 Windo

xu的blog 1643

bufferoverflowu.lib

bufferoverflowu.lib,使用VS编译一些源码报错: "无法打开输入文件'bufferoverflowu.lib'" 可能会要用到这个库,上传以共享

bufferoverflowu.lib,使用VS编译一些源码报错: "无法打开输入文件'bufferoverflowu.lib'" 可能会要用到这个库

bufferoverflowu.lib,使用VS编译一些源码报错: "无法打开输入文件'bufferoverflowu.lib'" 可能会要用到这个库

无法解析外部符号 __security_cookie”问题解决

编译VC工程时出现了标题所示问题,资料搜索一下,在微软网站找到答案了,解决方法如下:1)选择“项目”-》“属性”-》“C/C++”-》“代码生成”-》“缓冲区安全检查”,设为“否”2)选择“项目”-》“属性”-》“链接器”-》“输入”-》“附加依赖项”,增加”bufferoverflowU.lib”然后编译工程,解决问题。下面是微软的原文,说的很冗长,但是很直接!在 Windows Serve

通星技术 2万+

关于在vs2005中出现: error LNK2001: 无法解析外部符号 __security_cookie现象的处理办法

http://mobile.winfans.net/ccs/forums/904/ShowPost.aspx 两种方法: 1. 加入代码: #if (_WIN32_WCE #pragma comment(lib, "CCrtRtti.lib") #endif 2.在 Property Page 的 C/C++ 设置中,把 Buffer Overflow Check 关闭。我倾向用这种方法。

samantha_sun的专栏 9214

VC6转VS2003 无法解析外部符号 __security_cookie (2010-07-02 04:45:56)

VC6转VS2003 无法解析外部符号 __security_cookie  (2010-07-02 04:45:56) 转载▼ 标签:  it 分类: Windows VC6的工程转换成VS2003时,经常会遇到 --- 无法解析外部符号 __security_cookie 的错误 原因有一下几点: 1. VC2003的编译

autumn20080101的专栏 914

无法解析外部符号 __security_cookie”问题解决

编译VC工程时出现了标题所示问题,资料搜索一下,在微软网站找到答案了,解决方法如下:1)选择“项目”-》“属性”-》“C/C++”-》“代码生成”-》“缓冲区安全检查”,设为“否”2)选择“项目”-》“属性”-》“链接器”-》“输入”-》“附加依赖项”,增加”bufferoverflowU.lib” http://blog.csdn.net/tonxi/archive/2007/04/09

danxuezx的专栏 1170

飞鸽传书系列 一 “无法解析外部符号 __security_cookie”问题解决

编译VC工程时出现了标题所示问题,资料搜索一下,在微软网站找到答案了,解决方法如下: 1)选择“项目”-》“属性”-》“C/C++”-》“代码生成”-》“缓冲区安全检查”,设为“否” 2)选择“项目”-》“属性”-》“链接器”-》“输入”-》“附加依赖项”,增加”buffer

477

"链接器工具错误 LNK 2001 无法解析外部符号 __security_cookie " 解决方法

<br />编译VC工程时出现了标题所示问题,资料搜索一下,在微软网站找到答案了,解决方法如下:<br />1)选择“项目”-》“属性”-》“C/C++”-》“代码生成”-》“缓冲区安全检查”,设为“否”<br />2)选择“项目”-》“属性”-》“链接器”-》“输入”-》“附加依赖项”,增加”bufferoverflowU.lib”<br />然后编译工程,解决问题。<br />下面是微软的原文,说的很冗长,但是很直接! 在 Windows Server 2003 Service Pack 1 通过 Wi

Linux_lee的专栏 3851

在vs2005中出现: error LNK2001: 无法解析外部符号 __security_cookie现象的处理办法

两种方法:1. 加入代码:#if (_WIN32_WCE < 0x0500)#pragma comment(lib, "CCrtRtti.lib")#endif2.在 Property Page 的 C/C++ 设置中,把 Buffer Overflow Check 关闭。我倾向用这种方法。因为 CE 下的安全问题可以预见的时间内是不存在的。没必要每个函

Dreamcode ~ All in AI 4817

在vs2005/2010 中出现: error LNK2001: 无法解析外部符号 __security_cookie现象的处理办法

两种方法:  1. 加入代码:  #if (_WIN32_WCE #pragma comment(lib, "CCrtRtti.lib")  #endif  2.在 Property Page 的 C/C++ 设置中,把 Buffer Overflow Check 关闭。我倾向用这种方法。因为 CE 下的安全问题可以预见的时间内是不存在的。没必要每个函数都检查缓冲区溢出。

jinguniang的博客 2857

ntoskrnl.lib(loadcfg.obj) : error LNK2001: 无法解析外部符号 ___security_cookie 解决方法

背景 今天编译公司x86驱动的时候发现了如下报错,我也奇怪,为什么会找不到符号 后来发现是因为用的xp的lib。ObRegisterCallbacks最少都是sp1 改为win7\i386,错误变成了 后来在网上找了找,都是一个人写的,被反复的转载,意思是win7不能用__try,那怎么解决这个问题。 解决方法 加入BufferOverflowK.lib 参考链接 ...

被遗弃的庸才博客 1041

在vs2005中出现: error LNK2001: 无法解析外部符号 __security_cookie现象的处理办法...

两种方法: 1. 加入代码: #if (_WIN32_WCE &lt; 0x0500) #pragma comment(lib, "CCrtRtti.lib") #endif 2.在 Property Page 的 C/C++ 设置中,把 Buffer Overflow Check 关闭。我倾向用这种方法。因为 CE 下的安全问题可以预见的时间内是不存在的。没必要每个...

编程开发资料库 174

ntoskrnl.lib(loadcfg.obj) : error LNK2001: 无法解析外部符号 ___security_cookie 解决方法...

背景 今天编译公司x86驱动的时候发现了如下报错,我也奇怪,为什么会找不到符号 后来发现是因为用的xp的lib。ObRegisterCallbacks最少都是sp1 改为win7\i386,错误变成了 后来在网上找了找,都是一个人写的,被反复的转载,意思是win7不能用__try,那怎么解决这个问题。 解决方法 加入Buff...

墨鱼菜鸡 437
上一篇: 取硬件指纹信息
下一篇: PUZZLECE的编译
minddancer
博客等级 码龄26年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值