隐藏在shell中打印的回溯

时间:2014-03-06 17:13:35

标签: c bash shell unix core

我有一个程序,我正在注入一个错误,我希望这会导致分段错误。我面临的问题是如下错误:

char *str = malloc(sizeof(char)*10);
free(str+1);

我在shell中打印了以下内容:

*** Error in `./tests': free(): invalid pointer: 0x0000000002442574 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x80996)[0x2abd5ff5b996]
./tests[0x401558]
./tests[0x401735]
./tests[0x402211]
./tests[0x402c1b]
./tests[0x4013fd]
./tests[0x4014a2]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x2abd5fefcde5]
./tests[0x4011c9]
======= Memory map: ========
00400000-00407000 r-xp 00000000 08:05 13109176                           /home/jay/Desktop/Mutate/Mutate/CMeanQueue-master/tests
00606000-00607000 r--p 00006000 08:05 13109176                           /home/jay/Desktop/Mutate/Mutate/CMeanQueue-master/tests
00607000-00608000 rw-p 00007000 08:05 13109176                           /home/jay/Desktop/Mutate/Mutate/CMeanQueue-master/tests
00608000-0060a000 rw-p 00000000 00:00 0 
02440000-02461000 rw-p 00000000 00:00 0                                  [heap]
2abd5fcb7000-2abd5fcd8000 r-xp 00000000 08:05 11274438                   /lib64/ld-2.17.so
2abd5fcd8000-2abd5fcdb000 rw-p 00000000 00:00 0 
2abd5fcef000-2abd5fcf2000 rw-p 00000000 00:00 0 
2abd5fed8000-2abd5fed9000 r--p 00021000 08:05 11274438                   /lib64/ld-2.17.so
2abd5fed9000-2abd5fedb000 rw-p 00022000 08:05 11274438                   /lib64/ld-2.17.so
2abd5fedb000-2abd60098000 r-xp 00000000 08:05 6164261                    /lib/x86_64-linux-gnu/libc-2.17.so
2abd60098000-2abd60298000 ---p 001bd000 08:05 6164261                    /lib/x86_64-linux-gnu/libc-2.17.so
2abd60298000-2abd6029c000 r--p 001bd000 08:05 6164261                    /lib/x86_64-linux-gnu/libc-2.17.so
2abd6029c000-2abd6029e000 rw-p 001c1000 08:05 6164261                    /lib/x86_64-linux-gnu/libc-2.17.so
2abd6029e000-2abd602a3000 rw-p 00000000 00:00 0 
2abd602a3000-2abd602b8000 r-xp 00000000 08:05 6160389                    /lib/x86_64-linux-gnu/libgcc_s.so.1
2abd602b8000-2abd604b7000 ---p 00015000 08:05 6160389                    /lib/x86_64-linux-gnu/libgcc_s.so.1
2abd604b7000-2abd604b8000 r--p 00014000 08:05 6160389                    /lib/x86_64-linux-gnu/libgcc_s.so.1
2abd604b8000-2abd604b9000 rw-p 00015000 08:05 6160389                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fffee8c6000-7fffee8e7000 rw-p 00000000 00:00 0                          [stack]
7fffee993000-7fffee995000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

现在,我要做的是将其隐藏在显示器上,因为我正在制作故障注入工具,我知道这种情况发生了,并且不希望这样的输出毁掉用户的GUI。我试图将stderror重定向到文件2)将unlimit更改为0并且没有任何作用。

注意::我自己将此问题注入代码中,因此请不要建议修复错误。我的目的是将其隐藏在外壳上打印。

感谢

2 个答案:

答案 0 :(得分:1)

使用以下方法解决了上述示例:

#export MALLOC_CHECK_=0

http://kb.parallels.com/en/4611

答案 1 :(得分:0)

尝试更改内核日志级别以限制其打印内容。

类似的东西:

bash$ echo "0 0 0 0" > /proc/sys/kernel/printk

在这里写得很好:Change default console loglevel during boot up