2

当我构建 gcc-4.0.4(在 Ubuntu 10.10 上)时,出现了一个问题:

arm-linux-ar rc ./libgcc.a libgcc/./_udivsi3.o libgcc/./_divsi3.o libgcc/./_umodsi3.o libgcc/./_modsi3.o libgcc/./_dvmd_lnx.o libgcc/./ _muldi3.o libgcc/./_negdi2.o libgcc/./_lshrdi3.o libgcc/./_ashldi3.o libgcc/./_ashrdi3.o libgcc/./_cmpdi2.o libgcc/./_ucmpdi2.o libgcc/./_floatdidf .o libgcc/./_floatdisf.o libgcc/./_fixunsdfsi.o libgcc/./_fixunssfsi.o libgcc/./_fixunsdfdi.o libgcc/./_fixdfdi.o libgcc/./_fixunssfdi.o libgcc/./_fixsfdi。 o libgcc/./_fixxfdi.o libgcc/./_fixunsxfdi.o libgcc/./_floatdixf.o libgcc/./_fixunsxfsi.o libgcc/./_fixtfdi.o libgcc/./_fixunstfdi.o libgcc/./_floatditf.o libgcc/./_clear_cache.o libgcc/./_enable_execute_stack.o libgcc/./ trampoline.o libgcc/./_main.o libgcc/./_absvsi2.o libgcc/./_absvdi2.o libgcc/./_addvsi3.o libgcc/./_addvdi3.o libgcc/./_subvsi3.o libgcc/./_subvdi3.o libgcc/./_mulvsi3 .o libgcc/./_mulvdi3.o libgcc/./_negvsi2.o libgcc/./_negvdi2.o libgcc/./_ctors.o libgcc/./_ffssi2.o libgcc/./_ffsdi2.o libgcc/./_clz。 o libgcc/./_clzsi2.o libgcc/./_clzdi2.o libgcc/./_ctzsi2.o libgcc/./_ctzdi2.o libgcc/./_popcount_tab.o libgcc/./_popcountsi2.o libgcc/./_popcountdi2.o libgcc/./_paritysi2.o libgcc/./_paritydi2.o libgcc/./_powisf2.o libgcc/./_powidf2.o libgcc/./_powixf2.o libgcc/./_powitf2.o libgcc/./_mulsc3.o libgcc /./_muldc3.o libgcc/./_mulxc3.o libgcc/./_multc3.o libgcc/./_divsc3.o libgcc/./_divdc3.o libgcc/./_divxc3.o libgcc/./_divtc3.o libgcc/ ./ eprintf.o libgcc/./_gcc_bcmp.o libgcc/./_divdi3.o libgcc/./_moddi3.o libgcc/./_udivdi3.o libgcc/./_umoddi3.o libgcc/./_udiv_w_sdiv.o libgcc/./_udivmoddi4.o libgcc/./unwind -dw2.o libgcc/./unwind-dw2-fde-glibc.o libgcc/./unwind-sjlj.o libgcc/./gthr-gnat.o libgcc/./unwind-co * 检测到缓冲区溢出 *: arm-linux-ar 终止 ======= 回溯: =========/lib/libc.so.6(__fortify_fail+0x50)[0x8f1890] /lib/libc.so.6( +0xe478a)[0x8f078a] /lib/libc.so.6(+0xe3ec8)[0x8efec8] /lib/libc.so.6(_IO_default_xsputn+0x9e)[0x8765ee] /lib/libc.so.6(_IO_padn+0xd8) [0x869f78] /lib/libc.so.6(_IO_vfprintf+0x2b79)[0x84bd89] /lib/libc.so.6(__vsprintf_chk+0xad)[0x8eff7d] /lib/libc.so.6(__sprintf_chk+0x2d)[0x8efebd ] arm-linux-ar[0x8050c05] arm-linux-ar[0x804ed7e] arm-linux-ar[0x805168c] arm-linux-ar[0x8055178] arm-linux-ar[0x804b7d2] arm-linux-ar[0x804c494] / lib/libc.so.6(__libc_start_main+0xe7)[0x822ce7] arm-linux-ar[0x80496e1] ======= 内存映射:======== 003e4000-00400000 r-xp 00000000 08: 01 131636 /lib/ld-2.12.1.so 00400000-00401000 r--p 0001b000 08:01 131636 /lib/ld-2.12.1.so 00401000-00402000 rw-p 0001c000 08:01 131636 /lib/ld-2.12.1.so 006b2000-006cc000 r-xp 00000000 08:01 131244 /lib/libgcc_s.so.1 006cc000-006cd000 r--p 00019000 08:01 cc_131244 /lib/s.so. 1 006CD000-006CE000 RW-P 0001A000 08:01 131244 /lib/libgcc_so.so.1 0080C000C000-00963000 R-XP 000000000000000000000000000000000000011322222225 /LIBC /LIBC-2.12.12.12.12.12.1.SO SO SO SO SO SO SO SO SO :01 132225 /lib/libc-2.12.1.so 00965000-00966000 rw-p 00159000 08:01 132225 /lib/libc-2.12.1.so 00966000-00969000 rw-p 000000004 00:00 040-0 00:00 040-a-p xp 00000000 00:00 0 [vdso] 08048000-08097000 r-xp 00000000 08:01 4278511 0080c000-00963000 r-xp 00000000 08:01 132225 /lib/libc-2.12.1.so 00963000-00965000 r--p 00157000 08:01 132225 /lib/libc-2.10.00.so 06006-p-606 00159000 08:01 132225 /LIB/LIBC-2.12.1.SO 0096600S-00969000 RW-P 00000000 00 00 00 00 00 00 00 00A42000-00A43000 R-XP 0000000000 000000 00 00:00 0:00 0 [VDSO] 08048000-00000000000000000000000000000000000000000000000000000..0000 000000000000000来4278511 0080c000-00963000 r-xp 00000000 08:01 132225 /lib/libc-2.12.1.so 00963000-00965000 r--p 00157000 08:01 132225 /lib/libc-2.10.00.so 06006-p-606 00159000 08:01 132225 /LIB/LIBC-2.12.1.SO 0096600S-00969000 RW-P 00000000 00 00 00 00 00 00 00 00A42000-00A43000 R-XP 0000000000 000000 00 00:00 0:00 0 [VDSO] 08048000-00000000000000000000000000000000000000000000000000000..0000 000000000000000来427851
/home/zouhansi/armlinux/tools/bin/arm-linux-ar 08097000-08098000 r--p 0004e000 08:01 427851
/home/zouhansi/armlinux/tools/bin/arm-linux-ar 08098000-08099000 rw-p 0004f000 08:01 427851
/home/zouhansi/armlinux/tools/bin/arm-linux-ar 08099000-0809d000 rw-p 00000000 00:00 0 09354000-09558000 rw-p 00000000 00:00 0
-c74] --s 00000000 08:01 661517
/usr/lib/gconv/gconv-modules.cache b74c8000-b765b000 r--p 002a3000 08:01 657761 /usr/lib/locale/locale-archive b765b000-b785b000 r--p 00000000 08:01 657761 /usr/lib/locale/locale-archive b785b000-b785c000 rw-p 00000000 00:00 0 b785f000-b786b000 rw-p 00000000 00:00 0 bf839000-bf85c0000 rw-p 00:00
[00-p]

我从网络中找到了一些解决方案,在 CFLAGS 中添加“-D_FORTIFY_SOURCE=0”。我曾像这样编辑 Makefile:CFLAGS_FOR_BUILD = -g -O2 -D_FORTIFY_SOURCE=0

我再做一次。但是这个问题又出现了。

你能发表一些意见吗?非常感谢。

4

2 回答 2

1

我在构建 GCC 交叉编译器时遇到了类似的问题——似乎 binutils 充满了对 sprintf() 的不安全调用。

对我有用的解决方法是设置:

export CFLAGS="-fno-stack-protector -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0"

这些必须在运行 ../src/configure之前设置。

这里似乎有一个 binutils 补丁:http ://www.redhat.com/archives/fedora-extras-commits/2009-November/msg06284.html但它并没有完全适用于我使用的源,所以我坚持使用 CFLAGS hack。

于 2013-12-19T09:58:32.240 回答
0

在我用最新版本的binutils交叉编译 GCC 之后,它工作了,我不再遇到缓冲区溢出。

这是我安装最新的 binutils 后使用的行:

../gcc-4.5.1/configure --target=arm-linux --prefix=/.../toolchain/bin/binutils --disable-nls --disable-multilib --disable-shared --disable-decimal-float --disable--threads --disable-libmudflap --disable-libssp --disable-libgomp --enable-languages=c --with-system-zlib --with-newlib
于 2016-07-23T00:00:52.320 回答