解决XP DDK编译的native程序在win2k下蓝屏的问题

来源:互联网 发布:^ c语言 编辑:程序博客网 时间:2024/05/21 10:08

看来不设法把对 RtlUnhandledExceptionFilter 的引用去掉是解决不了这个问题了。

继续用 IDA 简单分析一下,发现这个函数是被 security_check_cookie 所调用到,我们知道 security_check_cookie 这个函数是微软最新的编译器自动添加到函数的尾部,用来检测函数是否存在堆栈发生缓存溢出的错误,如果是普通应用程序,我们可以通过把 c/c++ 的编译选项 Buffer  Security Check 关掉,这样就不使用编译器的 /GS 开关,就不会自动添加 security_check_cookie 这个函数了,可是在native程序里如何去掉 /GS 开关呢。

查找 DDK 目录下的所有包含 /GS 的文件,发现文件 i386mk.inc 里面有个 BUFFER_OVERFLOW_CHECKS 和 /GS 相关,在 sources 文件里加入一句 BUFFER_OVERFLOW_CHECKS=0,重新用 xp ddk 编译,发现编出来的 exe 里面没有再链接 RtlUnhandledExceptionFilter 函数了,放在 win2k下运行,也不蓝屏了,问题解决了。

原创粉丝点击