





为了不影响我们的测试效果,我们需要将内核的随机地址保护模式关掉。为了方式溢出攻击,现代很多操作系统都做了这样的随机地址保护。就是,当程序运行时,代码段、堆栈段的装载起始地址并不是固定不变的,而是每次运行进程时都会加上一个随机的偏移量,这会影响我们的测试效果。关闭它的方法很简单:






又到了该总结的时候了,可能有些童鞋都忘了这篇博文是要讨论什么话题了:
程序之所以会时不时的出现“Segmetation Fault”的根本原因是进程访问到了没有访问权限的地方,诸如内核区域或者其0x08048000之前的地方,或者由于要访问的内存没有经MMU进行映射所导致。而这种问题比较多的是出在malloc()之类的动态内存申请函数申请完内存,释放后,没有将指针设置为NULL,而其他地方在继续用先前申请的那块内存时,由于内存管理系统已经将其收回,所以才会出现这样的问题。良好的关于指针的使用习惯是,使用之前先判断其是否为NULL,所有已经归还给操作系统的内存,其访问指针都要及时置为NULL,防止所谓的“野指针”到处飞的情况,不然在大型项目里,光是围剿“Segmetation Fault”就要耗费不少兵力。




原文作者:;如有侵权,请联系管理员删除。