gpt4 book ai didi

c - "stack smashing detected"消息打印到哪个流?

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:41 27 4
gpt4 key购买 nike

考虑以下非常基本的程序,它已以多种形式出现在此处的其他问题上。

#include <string.h>

int main() {
char message[8];
strcpy(message, "Hello, world!");
}

在我的系统上,如果我将它放在一个名为 Classic.c 的文件中,在没有特殊标志的情况下编译它并运行它,我会得到以下输出。

$ gcc -o Classic Class.c 
$ ./Classic
*** stack smashing detected ***: ./Classic terminated
Aborted (core dumped)

通常,程序输出到 stderrstdout,所以我预计以下不会产生任何输出。

./Classic  2> /dev/null > /dev/null

但是,输出是完全一样的,所以我对这个场景有三个问题。

  1. 这里正在打印什么流?
  2. 我怎样才能编写打印到这个特殊流的代码(而不是故意破坏我的堆栈)。
  3. 如何重定向此流的输出?

请注意,我在 Linux 系统上运行。具体来说,Ubuntu 14.04。

最佳答案

因为它不是 stderr 或 stdout,所以只剩下一个选项:控制 tty。

您可以通过打开 /dev/tty 来写入您的代码。

故意重定向其输出非常困难(这就是 /dev/tty 也用于密码提示的原因)。也就是说,如果您真的想这样做,expect 可以用于此目的,emPTY 也可以。 .


expect 最简单的方法是使用包含的帮助程序 unbuffer,这将有效地将此内容重定向到标准输出:

$ sh -c 'echo hello >/dev/tty' >/dev/null 2>&1
hello
$ unbuffer sh -c 'echo hello >/dev/tty' >/dev/null 2>&1
$

关于c - "stack smashing detected"消息打印到哪个流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979965/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com