编译驱动模块时,出现“stack protector enabled but no compiler support”[解决办法]【转】

转自:http://blog.chinaunix.net/uid-26847859-id-3297170.html

原文地址:编译驱动模块时,出现“stack protector enabled but no compiler support”[解决办法] 作者:cjunsking

写驱动程序,编译驱动模块时,出现

“make[1]: Entering directory `/usr/src/linux-headers-2.6.32-5-amd64'

/usr/src/linux-headers-2.6.32-5-common/arch/x86/Makefile:81: stack protector enabled but no compiler support” - stack protector启用,但编译器不支持

 

解决方法1: (除去栈保护支持)

1. 修改 /usr/src/linux-header-xxx/目录下的文件.config,找到CONFIG_CC_STACKPROTECTOR,注释掉

2. 同样的办法修改/usr/src/linux-header-xxx/include/config/auto.conf

 

解决方法2: (保留栈保护功能)

在/usr/src/linux-headers-2.6.32-5-common/arch/x86/Makefile中有

 

 

  1. ifdef CONFIG_CC_STACKPROTECTOR
  2. cc_has_sp := $(srctree)/scripts/gcc-x86_$(BITS)-has-stack-protector.sh
  3. ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC) $(biarch)),y)
  4. stackp-y := -fstack-protector
  5. KBUILD_CFLAGS += $(stackp-y)
  6. else
  7. $(warning stack protector enabled but no compiler support)
  8. endif
  9. endif

 

 

判断编译器是否支持stack-protector的是/usr/src/linux-headers-2.6.32-5-common/scripts/gcc-x86_$(BITS)-has-stack-protector.sh文件(针对32/64位机器,有不同的文件)

 

 

点击(此处)折叠或打开

  1. #!/bin/sh
  2. echo "" | $* -S -xc -c -O0 -fstack-protector - -o - 2> /dev/null | grep -q "%gs"
  3. if [ "$?" -eq "0" ] ; then
  4. echo y
  5. else
  6. echo n
  7. fi

 

 

这个文件中判断gcc是否支持fstack-protector的方法是,查看""生成的支持栈保护的汇编码中是否含有"%gs"。大家可以通过实验来观察区别,而这个文件中的判断与实际的相反。故将这两个文件中的y和n互换位置即可。

 

实验:  Debian6.0.5/Linux 2.6.32-5-amd64/gcc 4.4.5

源代码: (test_stack_protector.c)

    int foo(void) { char X[200]; return 3; }

 

编译结果:

(1)  gcc -S -fstack-protector -o stack test_stack_protector.c

stack:

------------------------------------------------------------

 

  1. .file"test_stack_protector.c"
  2. .text
  3. .globl foo
  4. .typefoo, @function
  5. foo:
  6. pushl %ebp
  7. movl %esp, %ebp
  8. subl $216, %esp
  9. movl %gs:20, %eax
  10. movl %eax, -12(%ebp)
  11. xorl %eax, %eax
  12. movl $3, %eax
  13. movl -12(%ebp), %edx
  14. xorl %gs:20, %edx
  15. je .L3
  16. call __stack_chk_fail
  17. .L3:
  18. leave
  19. ret
  20. .sizefoo, .-foo
  21. .ident"GCC: (Debian 4.4.5-8) 4.4.5"
  22. .section.note.GNU-stack,"",@progbits

 

 

(2)   gcc -S -fno-stack-protector -o nostack test_stack_protector.c 

nostack:

------------------------------------------------------------

 

    1. .file"test_stack_protector.c"
    2. .text
    3. .globl foo
    4. .typefoo, @function
    5. foo:
    6. pushl %ebp
    7. movl %esp, %ebp
    8. subl $208, %esp
    9. movl $3, %eax
    10. leave
    11. ret
    12. .sizefoo, .-foo
    13. .ident"GCC: (Debian 4.4.5-8) 4.4.5"
    14. .section.note.GNU-stack,"",@progbits
时间: 2024-10-28 18:10:35

编译驱动模块时,出现“stack protector enabled but no compiler support”[解决办法]【转】的相关文章

Android app启动时黑屏或者白屏的原因及解决办法_Android

1.产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景. 示例: 2.解决办法 通过设置设置Style (1)设置背景图Theme 通过设置一张背景图. 当程序启动时,首先显示这张背景图,避免出现黑屏 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name=&qu

Android app启动时黑屏或者白屏的原因及解决办法

1.产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景. 示例: 2.解决办法 通过设置设置Style (1)设置背景图Theme 通过设置一张背景图. 当程序启动时,首先显示这张背景图,避免出现黑屏 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name=&qu

编译apahce时出现httpd-2.2.22/srclib/apr-util错误的解决方法

编译httpd-2.2.22/srclib/apr-util错误的解决方法,本文版权所有风信网 http://www.ithov.com 实测方法. 今天在编译apache时,出现如下问题: make[3]: Entering directory `/tmp/httpd-2.2.22/srclib/apr-util/xml/expat'/bin/sh ./conftools/mkinstalldirs /usr/local/apache2/lib /usr/local/apache2/inclu

浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法_php技巧

在编写PHP文件过程中,发现在浏览器预览PHP文件时,顶部会出现一行空白,影响了页面的布局. 关于BOM header的解释如下: 通常情况下,使用Windows系统自带的记事本程序编写网页程序,但在编写或修改php博客系统代码后,进行调试时总是会出现如同以下几点问题: –不能登入或者不能登出: –页顶出现一条空白: –页顶出现错误警告: –其它不正常的情况. 分析原因: 由于使用UTF-8编码,在编写或修改代码后都保存为utf-8编码格式.虽然现在几乎所有的文本编辑软件都可以显示并编辑UTF-

asp.net程序编译调试时偶尔出现访问被拒绝的错误的解决方法_实用技巧

问题描述: 编写asp.net程序,当编译调试比较频繁的时候,很容易经常地出现访问被拒绝.形如: 分析器错误信息: 访问被拒绝:"Microsoft.Web.UI.WebControls".源错误: 行 197: <add assembly="System.Web.Mobile, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>行 198: <add as

打开Word时提示“无法注册这篇文档”的解决办法

如果DCOM Server Process Launcher服务被禁用,启动Word时将出现"无法注册这篇文档,不能创建从其它文档到这篇文档的链接"的提示框. 方法一: 1.单击左下角的"开始"按钮,弹出的菜单窗口单击"运行"命令 2.在打开的"运行",对话框中输入"services.msc"命令,单击"确定"打开本地服务设置 3.在服务(本地)的右侧窗口找到并双击打开"DCO

电脑安装软件时无法将注册值写入注册表的解决办法

  有个网友安装程序时,弹出窗口,提示无法将注册值写入注册表,结果安装了好几遍,都无法成功,只好百度求助,他把出问题时的提示图片传上来,希望得到帮助.这样的问题一般都是注册表被禁了,或者说用户缺少注册表修改权限所致,所以才安装不了程序,给他提供的解决方法如下, 步骤一:解禁组策略 1,要解禁组策略,当然先得进入,进入方法,在开始菜单中,打开运行程序,然后在打开的运行框中输入gpedit.msc命令,确定. 2,进入组策略后,先在左侧目录中找到"用户配置"这一项,然打开它的子项,找到其中

升级WordPress时提示”另一更新正在进行”原因与解决办法

WordPress在升级的过程中,如果你刷新页面或者关闭页面会造成Wordpress升级不成功,下次升级时可能会遇到这样或者那样的问题.例如我前几天升级时刷新了页面,再次升级Wordpress时,Wordpress一直提示"另一更新正在进行".     这是由于在升级Wordpress时,Wordpress会在数据库wp_options表中增加core_updater.lock记录.如中途打断Wordpress升级,这个记录会留在数据库中.当下次升级时,Wordpress检测到此记录的

WordPress上传图片出现错误 - 上传时发生了错误,请稍候再试解决办法

这个问题在"解决WordPress上传图片出现"上传时发生了错误,请稍候再试"问题"中已经遇到一次且可以解决,只不过这次的问题好像不太一样.帮助朋友搬家WordPress后,在编辑内容上传图片的时候也有出现这样的错误提示,而且原有的水印插件DX-watermark不生效,看来问题应该在这里.   根据判断,应该是水印的路径不对导致的,因为看到DX-watermark水印管理界面演示图片不展现.只要思路对了,那解决起来就容易,直接到PHPMYADMIN数据库管理中心,