软件安全性分析课,里面花了很多时间讲缓冲区溢出的故事.
大一为了加入凝聚工作室,我也是查过相关的资料,也做过类似的实验,但都是瞎搞.
在老师给出例子之前,我一直把失败归结于自己的代码有问题,或者攻击方式有问题.
在看了老师的例子之后,我觉得我好像没写错什么…
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…
这,这你让我怎么溢出??
还要再研究研究…不论我是否使用优化编译,结果都是这样的…
等我找到答案,再来更新这一篇!