Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
抑制glibc内存损坏堆栈跟踪输出_C_Glibc - Fatal编程技术网

抑制glibc内存损坏堆栈跟踪输出

抑制glibc内存损坏堆栈跟踪输出,c,glibc,C,Glibc,当内存损坏时,有没有办法抑制glibc生成的输出?这是我看到的 make *** glibc detected *** /home/myname/php/sapi/cli/php: free(): invalid pointer: x0045d67f *** ======= Backtrace: ========= /lib/libc.so.6(+0x6eb41)[0x380b41] <snip> ======= Memory map: ======== 00115000-001

当内存损坏时,有没有办法抑制glibc生成的输出?这是我看到的

make
*** glibc detected *** /home/myname/php/sapi/cli/php: free(): invalid pointer:  x0045d67f ***
======= Backtrace: =========
/lib/libc.so.6(+0x6eb41)[0x380b41]

<snip>
======= Memory map: ========
00115000-00116000 r-xp 00000000 00:00 0          [vdso]
001d7000-001ee000 r-xp 00000000 ca:01 540738     /lib/libpthread-2.12.2.so
001ee000-001ef000 r--p 00016000 ca:01 540738     /lib/libpthread-2.12.2.so
001ef000-001f0000 rw-p 00017000 ca:01 540738     /lib/libpthread-2.12.2.so
<snip>
但没有一个能抓住输出。如果它没有被写入stderr,那么它到底是从哪里来的呢?如果可能的话,我想要一个不需要重建glibc的解决方案

这里有一些代码会给出这样的错误消息,但请注意,这与我正在编写的代码(php源代码)无关。我只想让控制台的这种输出静音

int main()
{
    char* ptr = (char*)malloc(sizeof("test"));
    char array[]= "test";
    ptr = array;
    free(ptr);
    return 0;
}

是:运行代码时,将环境变量
MALLOC\u CHECK\u
(后面的下划线是故意的)设置为
0

这就是,尽管这里建议的选项似乎不止是
0
1
2
。(该值最终作为
操作
参数传递给glibc中的
malloc_printerr()
,和。)


无法重定向它的原因是它被专门写入
/dev/tty
,除非您设置了环境变量
LIBC\u FATAL\u STDERR\u
。(我不确定这是否有文档记录,但可以找到相关代码。)

可能是在写stdin?(如果fd 0引用您的tty,则不会阻止进程向其写入任何内容)。或者,就这一点而言,只需
/dev/tty
,其想法是您确实希望看到这一点。(+1表示正确使用了“不关心更少”;-1表示不关心——这是公平的)。如果其他一切都失败了,那么抓取glibc源代码并通过grep查找消息文本。最好的压制方法是修复内存损坏。即使您在重新编译glibc时禁用了打印跟踪的代码,Joe Blackhat也可以让您的程序愉快地使用正确的外壳代码再次打印堆栈跟踪…;-)完美的非常感谢。我在看你写的东西,结果一无所获。这很有魅力。@Mike:很乐意帮忙!(请考虑)
int main()
{
    char* ptr = (char*)malloc(sizeof("test"));
    char array[]= "test";
    ptr = array;
    free(ptr);
    return 0;
}