在Ubuntu 10.10 32bit上构建gcc-4.0.4。检测到缓冲区溢出

时间:2013-03-27 13:47:30

标签: gcc ubuntu overflow

  

当我构建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-c.o    *检测到缓冲区溢出* :arm-linux-ar终止   ======= Backtrace:========= /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]   臂-Linux的AR [0x804c494]   /lib/libc.so.6(__libc_start_main+0xe7)[0x822ce7]   臂-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   131244 /lib/libgcc_s.so.1 006cd000-006ce000 rw-p 0001a000 08:01   131244 /lib/libgcc_s.so.1 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.12.1.so 00965000-00966000 rw-p 00159000 08:01   132225 /lib/libc-2.12.1.so 00966000-00969000 rw-p 00000000 00:00 0   00a42000-00a43000 r-xp 00000000 00:00 0 [vdso]   08048000-08097000 r-xp 00000000 08:01 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
  [堆] b74c1000-b74c8000 r - 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-bf85c000 rw-p 00000000 00:00 0
  [叠层]

     

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

     

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

     你可以发一些评论吗?非常感谢。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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