首页
社区
课程
招聘
[原创]error LNK2019 ……security_check_cookie错误成因分析和解决方案
发表于: 2013-5-29 09:37 3227

[原创]error LNK2019 ……security_check_cookie错误成因分析和解决方案

2013-5-29 09:37
3227
最近编写内核驱动程序,搭建好环境后发现使用VC6.0进行编译程序,出现了如下错误,查阅相关资料发现有些讲解的有些模糊,自己深思熟虑总结如下:

链接程序过程中出现了错误提示信息error LNK2019: unresolved external symbol @__security_check_cookie@4 referenced in function _Configure@0原因解析以及解决方法。

在进行内核程序开发过程,我们可能会碰到这个错误。这个错误在编译(Compile阶段)表示正常执行,但是在链接(link阶段)就出出现。另外以一种表现形式为error LNK2001: unresolved external symbol @__security_check_cookie@4。
原因分析:
上述错误解析为:链接阶段有不能识别的解析符号出现,这是因为microsft自从vs2002开始引入了一种新的编译开关选项“/GS”(好像表示的是Generation Security),表示生成安全的检测代码,我们在编辑内核驱动程序阶段,需要将link标签下面的工程选项进行替换为我们设置的工程的选项,这样,就将“/GS”开关给关闭了(详细内容请看本人的看雪论坛中内核编程环境设置WDK+windbg+VC6.0(2))。那么,在我们自身编写的程序中不会出现错误,但是在连接阶段,调用WDK内部函数时候,这些函数设置的默认检测security_cookie选项的,但是,我们进行了链接开关选项“/GS”关闭,所以,就会出现不能识别的问题。至于什么是Security_cookie,这个问题就要涉及到函数调用过程中的缓冲区溢出漏洞攻击,microsoft为了解决这个问题,在vs2002之后的库里面添加了进行缓冲区溢出检测,防止函数调用过程中出现缓冲区漏洞攻击,保证函数正确返回不被攻击利用。这一领域的斗争漫长而且精彩异常。如何防范以及具体的缓冲区溢出检测技术,比较繁杂。
大家只要知道,这个问题关键就是我们关闭了这个生成检测开关,但是库函数中默认的是调用这个检测来防范缓冲区漏洞攻击。
说到这里,大家应该很清楚怎么解决这个问题了。
解决方法:
既然是由于链接阶段不能识别安全检测缓冲区漏洞攻击security_cookie,那么我们只需要将这个库在链接阶段加上就好了。以VC6.0为例说明【project】->【Setting】->【link】->【Object/lib Module】添加这个安全检测技术需要的库就可以了。
注意,如果是编写用户态的程序,那么需要添加的库就是bufferoverflowU.lib
如果是编写的是内核态的程序,那么需要添加的库就是bufferoverflowK.lib
如下图:



两个的区别就是User或者Kernal而已。
        更过详细的内容见microsoft 解释http://support.microsoft.com/kb/894573/zh-cn

        期待共同学习进步!!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//