c - 为什么缓冲区溢出不会影响这段代码?

标签 c buffer-overflow

我有以下代码:

int main(int argc, char *argv[])
{
    char ch[10];
    printf("String 10 max. :: "); gets( ch );

    printf("String: %s\n", ch);

    return 0;
}

当我使用 "12345678" 作为 ch 运行它时,它运行良好。奇怪的是,当我使用 "123456789012345678901234567890" 运行时!第二个 printf 将所有字符串(30 个字符)打印到屏幕上。

为什么会发生这种情况?为什么我的代码没有崩溃?

感谢您的宝贵时间,
阿兹特克

最佳答案

缓冲区溢出是未定义的行为。它可能会崩溃,但没有人保证这一点。在大多数编译器中,堆栈会向下增长,因此您可能会覆盖 main 的返回地址,但对 printf 的调用不会覆盖您的字符串。

关于c - 为什么缓冲区溢出不会影响这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23226217/

相关文章:

java - 在示例程序中找不到 JNI_OnLoad_libname

C++ SQL 查询/为 C++ 封装的 SQL?

c - 如果有人提示 gets(),为什么不对 scanf ("%s"做同样的事情,...)?

linux - x64 linux 上的 Shellcode 注入(inject)

c - 区分字符串和字节数组?

c - 十六进制和字符数组打印有什么区别?

c - 将服务器套接字绑定(bind)到端口失败 (C)

c - 修改后被其他人覆盖原始文件

c - 提供十六进制值作为 C 中获取的输入

linux - 速率高时检测到 httperf 缓冲区溢出