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

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

“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-07-30 10:19:31

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

Python-使用unrar库时Couldn't find path to unrar library的解决办法

在Pycharm安装完unrar后,还要安装rar官方的库 不然运行的时候会抛出Couldn't find path to unrar library的错误 Windows: 下载rarlib的库文件,地址:http://www.rarlab.com/rar/UnRARDLL.exe 下载安装,默认设置就好了 安装完成后要设置环境变量 如果是64位操作系统 设置完环境变量后重启Pycharm Linux: 下载地址:http://www.rarlab.com/rar/unrarsrc-5.4.5

chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]

chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文: 默认情况下如下图 Y轴并不是从0开始,这样折现图的幅度会很大,不是正常的幅度,解决办法如下, 示例代码: window.onload = function () { var ctx = document.getElementById("canvas").getContext("2d"); window.myLine = new Chart(ctx).Line(lineChartDat

使用alipaySDK编译时找不到openssl/asn1.h文件的解决办法

构建新的项目时,在重新引入alipaySDK进行编译之后出现了一个错误:找不到 #include<openssl/asn1.h> 这个文件 首先排除是SDK的问题以及代码问题.在重新翻看了官方文档以及网上的一些帖子之后大致推断出问题出现的原因可能是由于文件路径的变化导致了配置信息出现错误.所以我的解决办法是重新配置文件路径. 1.打开项目,点击Build Settings,选择Header Search Paths. 2.在Header Search Paths对应的输入框中添加ssl的路径(

用xcode6.3编译早期工程时出现Undefined symbols for architecture x86_64错误的解决办法(转)

Xcode升级到5.1 新特性之一就是默认让所有App都通过64位编译器编译.原来在Xcode5.0.x的时候默认的Standard architectures只有(arm7,armv7s),到5.1之后默认就带上arm64的参数了. 目前临时的解决办法是 1.把1.选中Targets—>Build Settings—>Architectures.把build active architectures only 改为 NO. 2. 把最下面的Valid Architectures中的arm64

编译python扩展库遇到"unable to find vcvarsall.bat"的解决办法

最近想要学习一下python的Paramiko库,Paramiko依赖PyCrypto,在编译PyCrypto时碰到了问题,大体上的意思就是: unable to find vcvarsall.bat 问题分析: 追踪错误提示内容,定位到如下文件 python_path/lib/distutils/msvc9compiler.py 简单分析一下源码,发现在编译扩展库时,会通过此文件中提供的函数确定vcvarsall.bat的路径来设置vc的环境变量,msvc9compiler.py中定义了一个全

docx转doc时,防止公式被转成图片的解决办法

编辑社回复需要doc(Word 97-2003)格式的文档,可是将docx(Word 2007+)另存为doc格式时,发现公式被转成了图片.其实,最简单的办法就是,打个电话过去给编辑社:“大爷,拜托您用高版本的Word行吗?” 但是,我是不会这么干的.多番查阅资料,找到原因,并亲身实验找到一个可行的解决办法,也许还有更容易的办法. 原因:doc(Word 97-2003)使用公式3.0:docx(Word 2007+)默认使用MathType,当然也支持公式3.0.如果在docx文档中直接使用“

centos 6.5 启动时卡在进度条位置无法进入系统解决办法。

今天公司服务器因突然断电导致phddns 花生壳 启动失败,一直卡在启动进度条页面. 解决办法 1.按F5查看卡在什么位置, 2.查看解决方法:程序卡住的情况下,直接备份资料后,卸载程序重启就可以了. 3.进入到single单用户模式下,将程序删除就可以了. 进入single: 1.开机时按 'e' 键, 然后进入grub菜单. 2.选择要启动的版本,然后按 'e' 键 3.选择 带kernel的项,然后按 'e' 键,在后面添加 single,按回车 4.按 'b' 键.接下来系统就会进入一个

安装mysql 开启服务时出错/etc/init.d/mysqld: line 264: 的解决办法

安装mysql 开启服务时,出错/etc/init.d/mysqld: line 264: cd: mysql-5.5.60: No such file or directory解决办法https://blog.51cto.com/genxin/1783419 basedir 设置正确后,又出现,错误[[email protected] ~]# service mysqld startStarting MySQL.Logging to '/usr/local/mysql-5.5.60/local

linux 使用yum命令安装软件时出现HTTP Error 404 NOT FOUND错误的解决办法

在centos7 的环境下,使用yum install openssh-server 安装SSH时,在下载的过程中一直(软件安装包连接)提示HTTP error 404 NOT FOUND 错误: 将软件安装安装包连接网址复制到win下,可以正常访问下载: yum查找软件包依赖时使用的是过时的缓存,清空更新之后,再次安装软件,问题消失, 使用命令:yum clean all