用过C#的朋友可能认为它是一种十分安全的语言,其实C#也可以做到经典的缓冲区溢出。
本文章将用一个实例来描述C#究竟是如何发生缓冲区溢出的!
首先建立一个C# Console工程,并开启工程的“允许不安全代码”选项
键入代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
char ori = 'A';
StackOverflow();
Console.WriteLine(ori);
Console.ReadLine();
}
static unsafe void StackOverflow()
{
int* p = stackalloc int[1]; //声明一个int数组指针
int i = sizeof(int); //指针增量
while (*p != (int)'A') //找到Main函数中的ori变量
{
p += i;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Address: {0}", (int)p); //输出当前指针所指向的地址