关于缓冲区溢出

0xa*_*b3d 1 c stack-overflow buffer-overflow

我是道德黑客世界的新手,其中一个最重要的事情是堆栈溢出,无论如何我编写了一个易受攻击的C程序,它有一个char名称[400]语句,当我尝试用401A运行程序时它不会不要溢出,但是我所遵循的这本书说它必须溢出而且逻辑意义如此说,那么什么是错的?

Eli*_*sky 5

如果您已定义缓冲区:

char buf[400];
Run Code Online (Sandbox Code Playgroud)

并在其中写入401个字节,缓冲区已溢出.其余的,取决于代码的结构:

  • 缓冲区是如何分配的(静态地,动态地,在堆栈上)
  • 它在记忆之前和之后发生了什么
  • 您的体系结构的调用约定和ABI(在堆栈缓冲区的情况下)
  • 多一点...

事情比他们看起来更复杂.引用维基百科:

在计算机安全和编程中,缓冲区溢出或缓冲区溢出是异常,其中进程将数据存储在程序员为其预留的存储器外部的缓冲区中.额外数据覆盖相邻存储器,其可能包含其他数据,包括程序变量和程序流控制数据.这可能导致程序行为不稳定,包括内存访问错误,错误结果,程序终止(崩溃)或违反系统安全性.

请注意,此引号中可能包含该单词的多个实例.所有这一切都可能发生,也可能不会发生.同样,这取决于其他因素.