《windows内核编程问题集锦.pdf》由会员分享,可在线阅读,更多相关《windows内核编程问题集锦.pdf(2页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、内核驱动 内核驱动 unresolved external symbol _security_check_cookie42010年 2 月 27 日 评论 发表评论 最近在用 winddk 7600.16385.0 开发驱动,小心谨慎的按照这篇文章设置了编译连接参数,在编译选项关闭了 buffer security check,但工程里要用到 wdmsec.lib 静态库,里面链接进了符号 _security_check_cookie4,因此我编译始终出错,用了各种办法问题依旧,中间甚至试图逆向 wdmsec.lib 静态库,用 IDA 打开一看,发现工程浩大,只能放弃.G(oogle)啊 G
2、 啊,G 了好久,在 这 里 找到了解决方案:将 bufferoverflowU.lib 静态库加入链接依赖列表.问题解决.后来用 depends 打开 sys 文件一看,链接进了 kernel32.dll,对于 ring 3 的应用程序,这是很好的解决办法;但对于内核驱动,这是绝对不可以的.看来 这 里 才是解决问题的真正方法.在源代码的最后添加如下代码,然后在工程设置内添加 VS_IDE_BUILD 标记.在链接设置内将入口点从 DriverEntry 改成 GsDriverEntry.问题解决.查看源代码打印 帮助 01#ifdef VS_IDE_BUILD02 ULONG _secur
3、ity_cookie=0 xbb40;03 ULONG _security_cookie_complement=0 xFFFF44BF;04 05NTSTATUS GsDriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegPath)06 07 LARGE_INTEGER tickCount;08 KeQueryTickCount(&tickCount);09 if(!_security_cookie|_security_cookie=0 xbb40)10 11 ULONG temp=(ULONG)&_security_coo
4、kie;12 temp=(temp 8)tickCount.u.LowPart)&0 xffff;13 if(temp)14 _security_cookie=temp;15 else16 _security_cookie=tickCount.u.LowPart&0 xffff;17 18 19 _security_cookie_complement=_security_cookie;20 return DriverEntry(DriverObject,RegPath);21 22 23 void _fastcall _security_check_cookie(ULONG cookie)24
5、 25 if(cookie!=_security_cookie|cookie&0 xffff0000)26 KeBugCheckEx(0 x7f,cookie,_security_cookie,_security_cookie_complement,0);27 28#endif /VS_IDE_BUILDPS.也可以这么解决,如果 BufferSecurityCheck(/GS)开关是打开的,把入口点改成 GsDriverEntry8,并加上 BufferOverflowK.lib 静态库.PPS.原来,BufferOverflowK.lib 的意思是内核态的 BufferOverflow 库,BufferOverflowU.lib 是用户态的 BufferOverflow 库.Thats all.