c – 你能给出一个缓冲区溢出的例子吗?

我听说过缓冲区溢出很多,并且相信我理解了这个问题,但我仍然没有看到一个说法的例子
char buffer[16];

//code that will over write that buffer and launch notepad.exe

解决方法

首先,您需要一个可以启动其他程序的程序.以某种形式或其他形式执行OS exec的程序.这是高度操作系统和语言特定的.

其次,启动其他程序的程序必须从一些外部源读取到缓冲区.

第三,然后必须检查正在运行的程序 – 由编译器在内存中布局 – 以查看输入缓冲区和用于步骤1(启动其他程序)的其他变量是如何存在的.

第四,你必须编写一个实际超出缓冲区并设置其他变量的输入.

所以.第1部分和第2部分是一个在C中看起来像这样的程序.

#include <someOsstuff>
char buffer[16];
char *program_to_run= "something.exe";
void main( char *args[] ) {
    gets( buffer );
    exec( program_to_run );
}

第3部分需要对缓冲区和program_to_run的外观进行一些分析,但你会发现它可能只是

\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 s o m e t h i n g . e x e \x00

第4部分,你的输入,然后必须

1234567890123456notepad.exe\x00

所以它将填充缓冲区并写入program_to_run.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...