当前位置: 技术问答>linux和unix
大家见过这个错误吗,这是是原因啊,怎么解决?
来源: 互联网 发布时间:2017-04-05
本文导语: *** stack smashing detected ***: ./parsexml terminated ======= Backtrace: ========= /lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0xd23390] /lib/tls/i686/cmov/libc.so.6(+0xe233a)[0xd2333a] ./parsexml[0x8048c22] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xc57bd6] ./parsexml[0...
*** stack smashing detected ***: ./parsexml terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0xd23390]
/lib/tls/i686/cmov/libc.so.6(+0xe233a)[0xd2333a]
./parsexml[0x8048c22]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xc57bd6]
./parsexml[0x8048791]
======= Memory map: ========
00110000-00120000 r-xp 00000000 08:01 1710561 /usr/lib/gconv/libGB.so
00120000-00121000 r--p 0000f000 08:01 1710561 /usr/lib/gconv/libGB.so
00121000-00122000 rw-p 00010000 08:01 1710561 /usr/lib/gconv/libGB.so
0012c000-0012d000 r-xp 00000000 00:00 0 [vdso]
001fa000-00215000 r-xp 00000000 08:01 524313 /lib/ld-2.11.1.so
00215000-00216000 r--p 0001a000 08:01 524313 /lib/ld-2.11.1.so
00216000-00217000 rw-p 0001b000 08:01 524313 /lib/ld-2.11.1.so
002e8000-0030c000 r-xp 00000000 08:01 656185 /lib/tls/i686/cmov/libm-2.11.1.so
0030c000-0030d000 r--p 00023000 08:01 656185 /lib/tls/i686/cmov/libm-2.11.1.so
0030d000-0030e000 rw-p 00024000 08:01 656185 /lib/tls/i686/cmov/libm-2.11.1.so
0036c000-00455000 r-xp 00000000 08:01 1718725 /usr/lib/libstdc++.so.6.0.13
00455000-00459000 r--p 000e9000 08:01 1718725 /usr/lib/libstdc++.so.6.0.13
00459000-0045a000 rw-p 000ed000 08:01 1718725 /usr/lib/libstdc++.so.6.0.13
0045a000-00461000 rw-p 00000000 00:00 0
0056c000-0056f000 r-xp 00000000 08:01 1710357 /usr/lib/gconv/EUC-CN.so
0056f000-00570000 r--p 00002000 08:01 1710357 /usr/lib/gconv/EUC-CN.so
00570000-00571000 rw-p 00003000 08:01 1710357 /usr/lib/gconv/EUC-CN.so
0084e000-00972000 r-xp 00000000 08:01 1704368 /usr/lib/libxml2.so.2.7.6
00972000-00973000 ---p 00124000 08:01 1704368 /usr/lib/libxml2.so.2.7.6
00973000-00977000 r--p 00124000 08:01 1704368 /usr/lib/libxml2.so.2.7.6
00977000-00978000 rw-p 00128000 08:01 1704368 /usr/lib/libxml2.so.2.7.6
00978000-00979000 rw-p 00000000 00:00 0
009f2000-009f4000 r-xp 00000000 08:01 656183 /lib/tls/i686/cmov/libdl-2.11.1.so
009f4000-009f5000 r--p 00001000 08:01 656183 /lib/tls/i686/cmov/libdl-2.11.1.so
009f5000-009f6000 rw-p 00002000 08:01 656183 /lib/tls/i686/cmov/libdl-2.11.1.so
00c28000-00c3b000 r-xp 00000000 08:01 524486 /lib/libz.so.1.2.3.3
00c3b000-00c3c000 r--p 00012000 08:01 524486 /lib/libz.so.1.2.3.3
00c3c000-00c3d000 rw-p 00013000 08:01 524486 /lib/libz.so.1.2.3.3
00c41000-00d94000 r-xp 00000000 08:01 656177 /lib/tls/i686/cmov/libc-2.11.1.so
00d94000-00d95000 ---p 00153000 08:01 656177 /lib/tls/i686/cmov/libc-2.11.1.so
00d95000-00d97000 r--p 00153000 08:01 656177 /lib/tls/i686/cmov/libc-2.11.1.so
00d97000-00d98000 rw-p 00155000 08:01 656177 /lib/tls/i686/cmov/libc-2.11.1.so
00d98000-00d9b000 rw-p 00000000 00:00 0
00ef2000-00f0f000 r-xp 00000000 08:01 524530 /lib/libgcc_s.so.1
00f0f000-00f10000 r--p 0001c000 08:01 524530 /lib/libgcc_s.so.1get attribute abort
我主要做的事是在解析xml配置文件,这里需要用到的是libxml2库,C语言编写的库
|
131行
char UserID[10]; // 才10个字节,太小了"UserInfo--"都超过了
改为
char UserID[100];
char UserID[10];
sprintf(UserID,"UserInfo--%d",i);
char UserID[10]; // 才10个字节,太小了"UserInfo--"都超过了
改为
char UserID[100];
|
又是prasexml,你是下载的吧,这个解析文件写的不是特别好,少了一些合法性检测。因此,你使用的时候要小心,上的错误,就是你使用不当,造成越界或者空指针。
|
*** stack smashing detected
====
越界写,破坏了栈了。
====
越界写,破坏了栈了。
|
越界访问内存了,使用指针的时候得注意
|
C和C++中,对于数组越界的问题,基本都不报错,而是给出警告,你肯定是忽略了敬告导致。对于自己编译时产生的警告,最好尽可能的更改。或者将警告当错误来处理。