翻译自:https://www.geeksforgeeks.org/buffer-overflow-attack-with-example/
有两种缓冲区溢出攻击的方式:
1. 基于堆 2. 基于栈
第一种实现困难,不常用
第二种非常常见,用到了栈
编译器提供在编译和链接的过程中进行溢出检查的选项,但是运行时间很难检查,除非要用到异常处理机制
下面就是一个栈溢出的代码:
// A C program to demonstrate buffer overflow
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// Reserve 5 byte of buffer plus the terminating NULL.
// should allocate 8 bytes = 2 double words,
// To overflow, need more than 8 bytes...
char buffer[5]; // If more than 8 characters input
// by user, there will be access
// violation, segmentation fault
// a prompt how to execute the program...
if (argc < 2)
{
printf("strcpy() NOT executed....\n");
printf(