windows下的内存保护机制

0x00、二进制漏洞二进制漏洞是可执行文件(PE、ELF文件等)因编码时考虑不周,造成的软件执行了非预期的功能 。二进制漏洞早期主要以栈溢出为主 。我们都知道在C语言中调用一个函数,在编译后执行的是CALL指令,CALL指令会执行两个操作:(1)、将CALL指令之后下一条指令入栈 。(2)、跳转到函数地址 。函数在开始执行时主要工作为保存该函数会修改的寄存器的值和申请局部变量空间,而在函数执行结束时主要的工作为:(1)、将函数返回值入eax(2)、恢复本函数调用前的寄存器值(3)、释放局部变量空间(4)、调用ret指令跳转到函数调用结束后的下一条指令(返回地址)栈溢出指的是局部变量在使用过程中,由于代码编写考虑不当 , 造成了其大小超出了其本身的空间,覆盖掉了前栈帧EBP和返回地址等 。由于返回地址不对,函数调用结束后跳转到了不可预期的地址 , 造成了程序崩溃 。早期的栈溢出漏洞利用就是将函数的返回地址覆盖成一个可预期的地址,从而控制程序执行流程触发shellcode 。漏洞发生时,能控制的数据(包含shellcode)在局部变量中,局部变量又存在于栈上面 , 因此要想执行shellcode必须将程序执行流程跳转到栈上 。shellcode存
【windows下的内存保护机制】以上就是朝夕生活(www.30zx.com)关于“windows下的内存保护机制”的详细内容,希望对大家有所帮助!

猜你喜欢