免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13298 | 回复: 13
打印 上一主题 下一主题

有人遇到过 Unknown symbol __stack_chk_fail 这样的问题么 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-12 21:11 |只看该作者 |倒序浏览
写的一个程序 编译的时候没有任何问题  但insmod后出现 Unknown symbol __stack_chk_fail的错误
一般意味着什么 如何解决呢?

论坛徽章:
0
2 [报告]
发表于 2008-06-12 21:26 |只看该作者
我看到说需要添加-fno-stack-protector 在cflags里面  添加后:
CFLAGS :=-fno-stack-protector -I/usr/realtime/include -I/usr/realtime/include/asm -I/lib/modules/`uname -r`/build/include -I/lib/modules/`uname -r`/build/include/asm/mach-default\
结果make后居然是
make -b -C /lib/modules/2.6.19.7/build -fno-stack-protector -I/usr/realtime/include -I/usr/realtime/include/asm -I/lib/modules/`uname -r`/build/include -I/lib/modules/`uname -r`/build/include/asm/mach-default  M=/home/duanius/development/zc/kernel modules
make[1]: Entering directory `/usr/src/linux-2.6.19.7'
make[1]: no-stack-protector: No such file or directory
make[1]: *** 没有规则可以创建目标“no-stack-protector”。 停止。
make[1]: Leaving directory `/usr/src/linux-2.6.19.7'
make: *** [default] 错误 2

把-f好像解析成文件了   不明白

论坛徽章:
0
3 [报告]
发表于 2008-06-12 21:54 |只看该作者
附上全部makefile
obj-m := e1000zc.o
e1000zc-objs:=e1000_main.o e1000_hw.o e1000_ethtool.o e1000_param.o
PWD  := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
CFLAGS :=-fno-stack-protector  -I/usr/realtime/include -I/usr/realtime/include/asm -I/lib/modules/`uname -r`/build/include -I/lib/modules/`uname -r`/build/include/asm/mach-default\

default:
        $(MAKE) -b -C $(KDIR) $(CFLAGS) M=$(PWD) modules

install:
        chmod +x ./install.sh
        ./install.sh
uninstall:
        rm -f /dev/netchardrv0
        /sbin/rmmod e1000zc
        rmmod rtai_sem.ko       
        rmmod rtai_fifos.ko
        rmmod rtai_sched.ko
        rmmod rtai_hal.ko
clean:
        rm -rf *.o *.ko *.mod.c .tmp_versions .*.cmd Module.symvers

论坛徽章:
0
4 [报告]
发表于 2008-06-13 12:02 |只看该作者
你的CFLAGS   $(MAKE) -b -C $(KDIR) $(CFLAGS) M=$(PWD) modules
是多余的
stack如果被毁坏,那么如果没有检查,那么会导致没法查的问题,否则,gcc插入__stack_chk_fail

论坛徽章:
0
5 [报告]
发表于 2008-06-13 16:13 |只看该作者
原帖由 flw2 于 2008-6-13 12:02 发表
你的CFLAGS   $(MAKE) -b -C $(KDIR) $(CFLAGS) M=$(PWD) modules
是多余的
stack如果被毁坏,那么如果没有检查,那么会导致没法查的问题,否则,gcc插入__stack_chk_fail

那个cflags的问题能否多讲些  整体makefile应该怎么改?
还有一旦出现__stack_chk_fail  就一定说明程序有问题么?

论坛徽章:
0
6 [报告]
发表于 2008-06-13 16:34 |只看该作者

回复 #5 duanius 的帖子

你用  $(MAKE) -C $(KDIR) M=$(PWD) modules
看看有没有问题,新版的gcc会插入代码判断栈是否破坏,如果是就调用__stack_chk_fail,如果内核没有这个函数就会报__stack_chk_fail不存在了,这个函数貌似也是高版内核中加入的,主要调试用的

论坛徽章:
0
7 [报告]
发表于 2008-06-13 16:40 |只看该作者
原帖由 flw2 于 2008-6-13 16:34 发表
你用  $(MAKE) -C $(KDIR) M=$(PWD) modules
看看有没有问题,新版的gcc会插入代码判断栈是否破坏,如果是就调用__stack_chk_fail,如果内核没有这个函数就会报__stack_chk_fail不存在了,这个函数貌似也是高版 ...

我以前就是用$(MAKE) -C $(KDIR) M=$(PWD) modules的 但因为用了实时库 需要往makefile里加路径  所以才用了cflags 但是那个参数往cflags里面直接加出问题  不知道为什么   后来吧makefile改成

obj-m := e1000zc.o
e1000zc-objs:=e1000_main.o e1000_hw.o e1000_ethtool.o e1000_param.o
PWD  := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
CC=gcc -O2 -fno-stack-protector
CFLAGS :=-I/usr/realtime/include -I/usr/realtime/include/asm -I/lib/modules/`uname -r`/build/include -I/lib/modules/`uname -r`/build/include/asm/mach-default \

default:
        $(MAKE) -b -C $(KDIR) $(CFLAGS) M=$(PWD) modules

install:
        chmod +x ./install.sh
        ./install.sh
uninstall:
        rm -f /dev/netchardrv0
        /sbin/rmmod e1000zc
        rmmod rtai_sem.ko       
        rmmod rtai_fifos.ko
        rmmod rtai_sched.ko
        rmmod rtai_hal.ko
clean:
        rm -rf *.o *.ko *.mod.c .tmp_versions .*.cmd Module.symvers


# -fno-stack-protector


才成功  但还是想知道为什么直接往cflags加-fno-stack-protector不行  因为其他人都是这样做的

论坛徽章:
0
8 [报告]
发表于 2008-06-13 16:47 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2008-06-13 16:51 |只看该作者
CFLAGS 不是给make用的,你看看

make -b -C /lib/modules/2.6.19.7/build -fno-stack-protector -I/usr/realtime/include -I/usr/realtime/include/asm -I/lib/modules/`uname -r`/build/include -I/lib/modules/`uname -r`/build/include/asm/mach-default  M=/home/duanius/development/zc/kernel modules

这样-f参数没有给gcc而是给make了,make 认为makefile是 no-stack-protector 又不存在,而-I参数make认识,刚好也没伤害,所以你就认为可以了

删除然后试试,如果有问题,贴出来看看

论坛徽章:
0
10 [报告]
发表于 2008-06-13 17:05 |只看该作者
原帖由 flw2 于 2008-6-13 16:51 发表
CFLAGS 不是给make用的,你看看

make -b -C /lib/modules/2.6.19.7/build -fno-stack-protector -I/usr/realtime/include -I/usr/realtime/include/asm -I/lib/modules/`uname -r`/build/include -I/lib/mod ...

删除确实没问题了  但如果要加gcc用的参数 -fno-stack-protector添到哪呢  除了7楼贴的方法  我记得cflags就是gcc用的参数阿
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP