1.在函数刚开始执行时会设成一个标志,这个标志会入栈,当程序执行完之后,他会校验canary值是不是会发生变化,如果发生变化,说明程序被改过,发生异常,如果没改过就正常
这个在突破时我们用canary去泄露,canary是一个随机的值,每次程序执行他都是一个变量,核心就是每次执行时泄露一下,然后去拼接我们的shellcode
2.正常情况下能够在堆栈中加上我们shellcode的代码,但如果堆栈没有执行权限,shellcode就不能执行
3.函数地址随机化
堆喷射就是在堆栈里加很多shellcode,程序执行到任何一个shellcode都会执行获取shell
4.got表不可改
Canary保护