gpt4 book ai didi

C 程序中堆栈破坏的典型示例

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:15 27 4
gpt4 key购买 nike

有人能教我一个常见的例子吗(!)你在 C 程序中销毁堆栈?我在 Ubuntu 中使用 GCC。谢谢。

最佳答案

这取决于您所说的“销毁堆栈”是什么意思,但这是一个常见错误,通常会导致重要的堆栈驻留数据损坏:

void dumb()
{
char small[2];
strcpy(small, "too long to fit"); // Writes past the end of "small", overwriting vital information
}

这是安全漏洞的常见来源。它可能被用来劫持指令指针,使恶意代码得以执行。参见 buffer overflow .

另一个可能被描述为“破坏堆栈”的错误是 infinite recursion 的情况。 (在该页面上向下滚动):

int add(int n)
{
return n + add(n + 1);
}

由于缺少退出条件,它会将如此多的帧插入堆栈,最终变得“满”。 (除非编译器可以应用 tail-call optimization ;见下文)

这两个示例使用 GCC 4.4.3 编译时都没有警告。


注意:正如 Billy ONeal 在下面指出的那样,这些示例的行为特定于 x86,而不是 C 作为一种语言,并且可能因编译器而异。这并不是说它们演示如何在特定(且极其常见)的 C 实现中打破堆栈。

关于C 程序中堆栈破坏的典型示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3875974/

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