2014-03-06 48 views
1

我有一個程序,在這裏我注入了一個錯誤,我期望這會導致錯誤。我現在面臨的問題是,對於一個故障,如:隱藏在shell中打印回溯

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

我碰到下面的殼印:

*** 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)將無限制更改爲0並且沒有任何工作。

注意::我正在將此問題注入代碼中,因此請不要建議修復此錯誤。我的目標是將其隱藏在外殼上。

感謝

+0

是例如運行'./tests 2 >>/dev/null'是一個選項,還是它會在stderr上生成其他消息,而您確實想看到它?如果你不能忽略stderr,那麼'libc'可能會有一些你可以在運行程序之前設置的環境變量來影響顯示的消息,但是我不能告訴你它們離開我的頭頂。 – twalberg

回答

1

解決了上面的例子中使用:

#export MALLOC_CHECK_=0 

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

+0

嗨。你現在應該可以接受這個答案(我知道在寫答案時你不能立即這樣做,因爲在允許之前有2天的延遲)。 – hlovdal

+0

對不起。 – kingkong

+0

不需要抱歉:) – hlovdal

0

試着改變你的內核日誌級別來限制它打印。

類似:

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

大在這裏寫下:Change default console loglevel during boot up

+0

我不認爲這些消息來自內核....他們來自'libc' ... – twalberg

+0

似乎無法正常工作..,當使用OSX時,這些消息也不會打印到控制檯.. – kingkong

+0

解決了它使用http://kb.parallels.com/en/4611,不知道有什麼限制,雖然 – kingkong