gpt4 book ai didi

c - 将更大的字符串转换为更小的 char 数组

转载 作者:太空狗 更新时间:2023-10-29 15:29:53 27 4
gpt4 key购买 nike

为什么我这样做:

char teststrcpy[5];

strcpy(teststrcpy,"thisisahugestring");

我在运行时收到此消息:

Abort trap: 6

不应该直接覆盖teststrcpy内存右边的东西吗?如果不是,Abort trap 是什么意思?

我在 MAC OSX 下使用 GCC 编译器

请注意,为了回答一些评论,我这样做是为了玩弄 C,我不会尝试在生产中这样做。伙计们,别担心! :)

谢谢

最佳答案

我没有,但我读过 Mac OS 以不同方式处理溢出,它不允许您覆盖内存异常实例。 strcpy() 就是其中之一

在 Linux 机器上,此代码成功覆盖下一个堆栈,但由于 stack canary 而在 mac os 上被阻止(中止陷阱) .

您可以使用 gcc 选项 -fno-stack-protector 来解决这个问题


好的,因为您看到 __strcpy_chk 中止,这意味着它正在专门检查 strcpy(可能还有 friend )。因此理论上您可以执行以下操作*:

char teststrcpy[5];
gets(teststrcpy);

然后输入你的很长的字符串,它应该会如你所愿地表现得很糟糕。

*我只建议在此特定实例中使用 gets,以尝试绕过操作系统的现有保护机制。在任何其他情况下,我都不会建议任何人使用该代码。 gets 不安全。

关于c - 将更大的字符串转换为更小的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14466406/

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