软件安全性分析课,里面花了很多时间讲缓冲区溢出的故事.

大一为了加入凝聚工作室,我也是查过相关的资料,也做过类似的实验,但都是瞎搞.

在老师给出例子之前,我一直把失败归结于自己的代码有问题,或者攻击方式有问题.

在看了老师的例子之后,我觉得我好像没写错什么…

Run directly

现在内核牛逼了呢!

检查到了pc指向非法地址,就直接被内核终止了,所以,我也没办法

Debug with GDB

GDB真是个牛逼的东西,可以反编译,可以打断点,可以查看堆栈地址数据……

只要我在执行非法内存之前加个断点,看看栈数据是不是变得乱七八糟了,我的实验目的就达到了.

根据老师说的

char c[20];
char a;

这玩意儿运行的时候,在栈上面的顺序是ca

所以只要用不安全的函数,冲破c的长度,就可以覆盖a的数据.

然而gdb断点的时候,我惊奇的发现顺序是ac…

于是乎我就换了个代码

char a;
char c[20];
char b;

发现,栈里面是abc…

这,这你让我怎么溢出??

还要再研究研究…不论我是否使用优化编译,结果都是这样的…

等我找到答案,再来更新这一篇!