很多搞IT都听说过缓冲区溢出,但是怎么利用缓冲区溢出的Bug来运行你自己的代码呢?这里我只介绍怎么利用静态缓冲区溢出来运行黑客程序。因为动态的,我还不会用。:)
第一节 堆栈的形式
在程序运行的时候,每次程序调用一个函数的时候,程序就要在内存里面分配一个空间来保存这个函数要使用到的本地变量,还有参数啊什么什么的。下面用一个程序片断来演示一下堆栈的形式
void TestCaller()
{
TestMethod(1);
int i = 0;
}
}
void TestMethod(int p)
{
int l1 = 0;
char l2 = '3';
}
}
上面的程序很简单,就是定义了两个函数,函数TestCaller调用了函数TestMethod,而TestMethod定义了两个局部变量。在计算机的内存里面堆栈的形式如下(大概的模型啊,不是很精确的):
|----------------------|
| .... | <------ TestCaller的堆栈
|----------------------|
| 1 | <------ TestCaller传给TestMethod的参数p的值
|----------------------|
| TestCaller的ebp的值 | <------ TestCaller的堆栈的起始位置
|----------------