隐藏 shell 中打印的回溯

问题描述 投票:0回答:2

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

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,但没有任何效果。

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

c bash shell unix coredump
2个回答
1
投票

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

#export MALLOC_CHECK_=0

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


0
投票

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

类似:

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

这里写得很好:在启动期间更改默认控制台日志级别

© www.soinside.com 2019 - 2024. All rights reserved.